關於快取區

2021-08-04 23:17:57 字數 1172 閱讀 9444

c語言裡面的stdio.h庫函式裡涉及到了快取區,具體案例是這樣的:

#includestructuser;

int main(int argc, const char *argv)

我輸入了 : zhangsan 12 w

意思為 名張三 12歲 是個女的(woman) 

但是列印的是

zhangsan

pass anykey to continue...

為什麼w沒有列印出?這就是我們問題所在的關鍵》快取區。

什麼是快取區:為了解決高速裝置和低速裝置讀寫速率不吻合而建立的一塊儲存區域。(我自己的理解,如若有差錯,還請指出,謝謝。)

我看一部電影要1小時以上的時間才能看完,而伺服器只需要幾十秒就能將所有的資料傳送給我,但是我看的很慢怎麼辦?伺服器會這麼解決:將電影一秒一秒地傳輸給我,而這個過程需要1小時以上,是十分浪費資源的事情,假若伺服器將電影十幾秒傳輸完畢,就可以做其他的事,這樣效率就十分快捷了,於是乎便有了快取區的概念,為了解決高速裝置與低速裝置之間讀取速率不吻合而生成的東西。

cpu與記憶體之間有乙個快取區:cache,我們的cpu讀寫速度非常快,而記憶體則很慢,那麼,我們的cpu要把資料傳輸給記憶體時,是先將資料送到快取區,再由快取區交給記憶體,這樣解決了cpu的占用情況,使cpu的效率大大的提高。而在記憶體與我們的外部裝置之間 ,也有乙個快取區,叫輸入輸出緩衝區,分別是stdin緩衝區和stdout緩衝區。

輸入裝置 -> stdin緩衝區-> 記憶體

記憶體  -> stdout緩衝區 ->輸出裝置

而我們的例子輸入,zhangsan 12 w

將我們輸入的東西存在了緩衝區,

其中 zhangsan  (此處有個空格!)給了name陣列,12給了age 而12之後的空格則給了我們的***。

我們輸入的scanf(「%s%d%c」,...) 中並沒有申明輸出樣式 那麼 按照字元控制符的特性,第乙個%s不認識數字,到1之前就停止了,而%d不認識字元,在空格前停止,%c認識空格,就將空格接受,最後我們的w便被華麗的遺留下來。

也就是說在stdio.h中的scanf函式使用了緩衝區,正如我第一篇部落格裡寫的進度條,就是利用了緩衝區的特點而寫出來的。

具體的東西自己可以寫一下感受。

在這裡補充說明一下,我們的*** 是個char型別的變數,所以只需要得到乙個字元,即讀到空格就出去了,不在讀w。

IO流關於BufferReader快取區

io流 2020 11 11 遇到乙個有趣的問題感覺很考驗關於bufferreader的基本功 bufferreader的存在價值主要是減少流進出磁碟的次數,通過創立乙個bufferreader作為乙個緩衝區,減少記憶體和硬碟互動次數 它是乙個帶有字元緩衝區的輸入流,裡面有乙個8192大小的字元緩衝...

方形快取區

如何製作點的方形快取區 之前收到客戶的需求,需要製作點圖層的方形快取區。但是在 arcgis 中並沒有提供方形快取區,只能通過 buffer 工具製作圓形快取區。那麼如何生成方形快取區呢,莫非需要 engine 寫程式根據點座標尋找方形快取區的四角座標,然後再生成正方形要素嗎?太麻煩了吧。接下來看看...

硬碟快取區

磁碟上必須有快取,用來接收指令和資料,還被用來進行預讀。磁碟快取時刻處於開啟狀態。有很多文件資料上提到某些情況下可以 禁用 磁碟快取,這是容易造成誤解的說法。快取在磁碟上表現為一塊電路板上的ram晶元,其容量大小是固定的,目前有2mb,8mb,16mb,32mb等容量規格。所謂 禁用 磁碟快取值得其...