2013-08-05 92 views
1

是否可以停止在C/C++中刷新自己的io緩衝區?停止從C中刷新的io緩衝區

爲了獲得最佳性能,我試圖保存數據,然後在操作完成後刷新。

我可以寫入一個數組,然後打印出來,我只是想知道這是否可能。

+3

您是否真的確定是造成問題的潮水?如果你正在向一個文件寫入大量數據(如果你使用iostream,你已經刪除了'endl'而不是'\ n''),那麼硬盤很可能是限制因素。如果受到硬盤驅動器實際速度的限制,刷新緩衝區將無濟於事。 –

+0

這是一個有效的觀點。在這種情況下,數據不會超過幾兆字節,但對於其他可能導致問題的情況。有沒有辦法在C中要求操作系統分配RAM而不是頁面文件? –

+1

讀取/寫入文件的最快方式之一是使用「內存映射文件」。這意味着您使用'mmap'(在Linux/MacOS /其他Unix)或'MapViewOfFile'(Windows),並寫入內存而不是文件。我仍然懷疑刷新並不是真正的問題,但內存映射文件使用更好的接口將數據寫入文件,因爲它不需要對數據進行雙重緩衝 - 它可以直接從內存頁面寫入它分配給該文件中的該位置。 –

回答

4

您可以通過調用setvbuf來增加緩衝區的大小。

+1

或者用相同的功能刪除緩衝區並使用自己的緩衝區。當你超過緩衝區,比如1​​B時,這可以使你更好地控制並防止小的沖洗。 – Kelm