數組緩存區
⑴ 緩沖區是什麼意思
緩沖區,也稱為緩存,是內存空間的一部分。也就是說,在內存空間中預留了一定的存儲空間,用來緩沖輸入或輸出的數據。這個保留的空間稱為緩沖區。
緩沖區是固定數據量的容器,它的功能是一個內存或一個分段的傳輸區,數據可以存儲在這里,以後用於檢索。
緩沖的四個性質
1.容量(容量)
指緩沖區可以容納的數據元素的最大數量。該容量是在創建緩沖區時設置的,不能更改。
2、上限(極限)
引用緩沖區中不能讀寫的第一個元素數組的下標索引。它也可以被認為是緩沖區中元素的實際數量。
3.位置
指的是要讀取或寫入的下一個元素的索引。該值將隨著get()或put()的調用而自動更新。
4.馬克(馬克)
指備忘錄位置。調用mark()設置mark = position,調用reset()設置position = mark。標記在設置之前是未定義的。
⑵ C語言緩沖區的問題:下面是代碼
輸出緩沖區:
c標准規定fflush()函數實現,用來刷新輸出(stdout)緩存的,對於(stdin)是么有意義的,gcc也不能使用fflush(stdin)來刷新,因為gcc么實現它。
那麼為什麼要刷新呢,個人認為是這樣的
打個比方getchar()函數,我們知道他是從界面讀取用戶輸入的字元,讀取之後編譯器就把它放在緩存中,當達到一定值的時候,才寫入文件什麼的,或者我們自己主動調用函數寫進去,這個時候如果你還要讀取字元到另一個文件中,你會發現這個時候不是你要寫入文件的字元,這個時候你就應該刷新下緩存。
打個比較典型的比方:
char
p[]={「a」,「b」,「c」};
printf("%d",strlen(p));
我們發現輸出的數值不是我們想像的3,為什麼,這就是緩存的問題,因為數組p的結束符不是『/0』,系統會從緩存裡面一直讀,根據我的理解如果先刷新下緩存,應該就是3了
對於lz的例子我覺得好像么什麼問題,如果要加刷新緩沖,那我覺得可能是,你sleep(1)的時候,其他程序開始佔用cpu,導致緩存發生變化,導致輸出不正常
刷新緩存在tcp和udp通訊的時候用的很多,lz可以看看這方面資料