我在C語言程式設計時經常會用到getchar函式或者scanf函式,它們都是從緩衝區中讀入資料的。除了緩衝區,也有一些C語言函式不會用到緩衝區。那麼我的疑問就是在C語言程式設計中什麼時候會用到緩衝區,什麼時候用不到緩衝區呢?
回覆列表
-
1 # 素食的貓
-
2 # 楊振浩220
緩衝區是為了提高io操作效率。有了緩衝區,就可以對多次鍵盤寫入進行一次io讀取。不必每敲擊一下鍵盤就立即呼叫getchar函式。系統呼叫中存在沒有緩衝區的io函式及最佳化的有緩衝區的io函式。c語言對系統呼叫進行了封裝,應該是使用有緩衝區的io函式,只是可以選擇立即重新整理緩衝區。
-
3 # 和不同
問題中所提到的緩衝區應指的是I/O緩衝區。
具體庫函式是否使用緩衝區,可在庫函式相關文件中查詢。
對一般的Unix/Linux系統來說,I/O都會在核心態進行緩衝,使用者態則有的使用緩衝區,而有的不使用緩衝區。具體一點:
核心態:
塊裝置都需使用緩衝區,且通常較大,以便完成DMA之類的操作字元裝置使用緩衝區,但通常較小使用者態:
需要一定速度穩定性時,往往傾向於使用緩衝區,如:影片和音訊錄製和播放大批次處理,對速度穩定性不敏感時,傾向於不使用緩衝區,以減少緩衝區管理帶來的系統負荷,如:大批次非實時資料處理
具體決策時需考慮很多因素,簡單說說,拋磚引玉咯。
緩衝區就是個小水庫,輸入、輸出速度差別越大,緩衝區就要的越大。也就是說:你的程式執行起來很慢,但有有突發的字元輸入,那麼就要有緩衝區。