您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“C語言中為什么要引入緩沖區”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C語言中為什么要引入緩沖區”這篇文章吧。
緩沖區又稱為緩存,它是內存空間的一部分。也就是說,在內存空間中預留了一定的存儲空間,這些存儲空間用來緩沖輸入或輸出的數據,這部分預留的空間就叫做緩沖區。
緩沖區根據其對應的是輸入設備還是輸出設備,分為輸入緩沖區和輸出緩沖區。
為什么要引入緩沖區
比如我們從磁盤里取信息,我們先把讀出的數據放在緩沖區,計算機再直接從緩沖區中取數據,等緩沖區的數據取完后再去磁盤中讀取,這樣就可以減少磁盤的讀寫次數,再加上計算機對緩沖區的操作大大快于對磁盤的操作,故應用緩沖區可大大提高計算機的運行速度。
又比如,我們使用打印機打印文檔,由于打印機的打印速度相對較慢,我們先把文檔輸出到打印機相應的緩沖區,打印機再自行逐步打印,這時我們的CPU可以處理別的事情。
現在您基本明白了吧,緩沖區就是一塊內存區,它用在輸入輸出設備和CPU之間,用來緩存數據。它使得低速的輸入輸出設備和高速的CPU能夠協調工作,避免低速的輸入輸出設備占用CPU,解放出CPU,使其能夠高效率工作。
緩沖區的類型
緩沖區 分為三種類型:全緩沖、行緩沖和不帶緩沖。
1) 全緩沖
在這種情況下,當填滿標準I/O緩存后才進行實際I/O操作。全緩沖的典型代表是對磁盤文件的讀寫。
2) 行緩沖
在這種情況下,當在輸入和輸出中遇到換行符時,執行真正的I/O操作。這時,我們輸入的字符先存放在緩沖區,等按下回車鍵換行時才進行實際的I/O操作。典型代表是標準輸入(stdin)和標準輸出(stdout)。
3) 不帶緩沖
也就是不進行緩沖,標準出錯情況stderr是典型代表,這使得出錯信息可以直接盡快地顯示出來。
下面開始本文的正文:通過實例講解C語言中的printf()緩沖問題
起步
標準輸出被滯后了. 不同編譯器出來的結果可能不一樣. 我在windows平臺的 VC++6.0 上是121212.
分析
標準輸出和標準出錯的緩沖機制不同,標準出錯不緩沖,標準輸出有緩沖.
什么情況下會刷新緩沖區?
程序結束時調用 exit(0) .
遇到 \n , \r 時會刷新緩沖區.
手動刷新 fflush .
緩沖區滿時自動刷新.
附錄
示例代碼:
#include <stdio.h> int main(int argc, char const *argv[]) { int i; for (i = 0; i < 3; ++i) { printf("1"); fprintf(stderr, "2"); } }
找到了讓 windows 平臺也使用輸出緩沖的方式了:
#include <stdio.h> char buf[512]; int main(int argc, char const *argv[]) { setvbuf(stdout, buf, _IOLBF, 512); int i; for (i = 0; i < 3; ++i) { printf("1"); fprintf(stderr, "2"); } }
以上是“C語言中為什么要引入緩沖區”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。