C語言快取區詳解

2021-06-28 10:41:48 字數 1312 閱讀 6261

緩衝區又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做

緩衝區。

緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。比如我們從磁碟裡取資訊,我們先把讀出的資料放在緩衝區,計算機再直接從緩衝區中取資料,等緩衝區的資料取完後再去磁碟中讀取,這樣就可以減少磁碟的讀寫次數,再加上計算機對緩衝區的操作大大快於對磁碟的操作,故應用緩衝區可大大提高計算機的執行速度。

又比如,我們使用印表機列印文件,由於印表機的列印速度相對較慢,我們先把文件輸出到印表機相應的緩衝區,印表機再自行逐步列印,這時我們的cpu可以處理別的事情。

現在您基本明白了吧,緩衝區就是一塊記憶體區,它用在輸入輸出裝置和cpu之間,用來快取資料。它使得低速的輸入輸出裝置和高速的cpu能夠協調工作,避免低速的輸入輸出裝置占用cpu,解放出cpu,使其能夠高效率工作。緩衝區 分為三種型別:全緩衝、行緩衝和不帶緩衝。

1) 全緩衝

在這種情況下,當填滿標準i/o快取後才進行實際i/o操作。全緩衝的典型代表是對磁碟檔案的讀寫。

2) 行緩衝

在這種情況下,當在輸入和輸出中遇到換行符時,執行真正的i/o操作。這時,我們輸入的字元先存放在緩衝區,等按下回車鍵換行時才進行實際的i/o操作。典型代表是標準輸入(stdin)和標準輸出(stdout)。

3) 不帶緩衝

也就是不進行緩衝,標準出錯情況stderr是典型代表,這使得出錯資訊可以直接盡快地顯示出來。

ansi c( c89 )要求快取具有下列特徵:

但是,這並沒有告訴我們如果標準輸入和輸出涉及互動作用裝置時,它們是不帶快取的還是行快取的,以及標準輸出是不帶快取的,還是行快取的。

大部分系統預設使用下列型別的快取:

我們經常要用到標準輸入輸出流,而ansi c對stdin、stdout和stderr的快取特徵沒有強行的規定,以至於不同的系統可能有不同的stdin、stdout和stderr的快取特徵。目前主要的快取特徵是:stdin和stdout是行快取;而stderr是無快取的。 

如果我們沒有自己設定緩衝區的話,系統會預設為標準輸入輸出設定乙個緩衝區,這個緩衝區的大小通常是512個位元組的大小。

緩衝區大小由 stdio.h 標頭檔案中的巨集 bufsiz 定義,如果希望檢視它的大小,包含標頭檔案,直接輸出它的值即可:

printf

("%d"

, bufsiz);

緩衝區的大小是可以改變的,也可以將檔案關聯到自定義的緩衝區,詳情可以檢視 

setvbuf()

和 setbuf()

函式。下列情況會引發緩衝區的重新整理:

C 環形快取區的實現

簡單介紹 環形緩衝區就是在最開始的時候申請乙個大buffer,有乙個讀指標,乙個寫指標,隨著資料寫入和讀取改變讀寫指標,具體分為三總情況 1 是讀寫速度差不多,這種情況比較簡單。3 就是讀速度快,這種情況也比較簡單,直接返回即可。下面我們來分析一下我的具體讀寫 buffer的大小根據讀寫指標的快慢合...

方形快取區

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

關於快取區

c語言裡面的stdio.h庫函式裡涉及到了快取區,具體案例是這樣的 includestructuser int main int argc,const char argv 我輸入了 zhangsan 12 w 意思為 名張三 12歲 是個女的 woman 但是列印的是 zhangsan pass a...