2012-05-31 104 views
3

我在讀別人的代碼,看到很多人用BUFFER_SIZE這樣的宏作爲宏。事情是,許多程序可以寫入沒有這個緩衝區的東西。那麼我們什麼時候需要緩衝,什麼時候不需要緩衝?我的意思是,爲什麼我們需要緩衝區?以及如何正確使用它?我們什麼時候需要C中的緩衝區?

+0

這是一個真正的問題嗎?是關於一般的緩衝區,使用宏而不是幻數,或者如何編寫沒有緩衝區的程序?澄清這一點,以消除我的downvote。 –

回答

4

維基百科:

一個緩衝器是用於在其被從一個地方移動到另一個臨時保持數據的物理存儲器的存儲區域。

有了這樣說,我覺得有緩衝區的幾個具體的用途:

  • 轉化異步數據源爲同步數據來源: 這是一個大的,很多的API是以這種思維方式構建的。例如,假設您正在讀取一種本質上容易失敗的數據源。異步你有一個可能在某些時候失敗的流,但你可以請求再次讀取數據。這種數據處理是一個非常低層次的細節,你不希望程序員在高水平時不得不擔心它。該解決方案,寫一個管理流低水平的處理程序,一旦它被安全地讀入數據放在緩衝區中。例如,你看到這個使用的文件系統,網絡協議等一個緩衝的...

  • 傳遞大量數據:如果你想在多人之間共享數據,你需要一個臨時的地方來存儲數據以在人們之間進行調解。

  • 複製事物/進行破壞性操作:如果您有一種情況需要釋放一個指針並在內存中移動某些內容(無論出於何種原因),則可以將數據放在臨時存放位置。一種常見的情況是我在做某種類似於破壞性地操作字符串的東西:我無法操縱原始字符串,我需要複製它,所以如果其他人堅持它,我不會損壞指針。

0

緩衝區只是一塊數據,你需要多少,什麼時候需要它依賴於任務。涉及緩衝區的最常見操作是文件I/O和數組。

0

有時,它被用來吸收一些網絡抖動。 您可以在Youtube上流暢觀看電影的原因是您的瀏覽器首先將一些數據下載到緩衝區中,然後播放它。

相關問題