2012-11-17 42 views
11

我必須使用read函數讀取C文件中的大文件。我只是想知道在性能方面我們保留了什麼樣的緩衝區大小。文件大小可能會達到幾十GB。用於讀取文件的最佳緩衝區大小C

+0

當然緩衝區大小很重要,但「最佳」取決於。 –

+0

合理範圍內越大越好。使用兩個冪的緩衝區大小(或至少是512的倍數)會有一些小優點。 –

+0

@HotLicks你能解釋一下爲什麼'512' –

回答

0

首先:當然,是磁盤邏輯/物理扇區大小的倍數,可以使用hdparm進行檢查。這是一樣的

提示:libc的fopen(3),fread(3),fwrite(3)等功能已經爲你做了一些很好的緩衝。

另一個提示:如果你不需要流式傳輸整個文件,而是隨機訪問它的一部分,你可以試試mmap()

+0

如果沒有其他指示('O_DIRECT' /'O_SYNC'),即使使用'open | read | write'(page cache + readahead),OS也會執行大量緩衝 – SaveTheRbtz

8

簡短版本。
這取決於。在x86緩衝區大小爲4096字節是一個很好的開始(一個page sizeAdvanced Format塊大小)。

更長的版本。
在UNIX中,它依賴於內核,libc,文件系統,硬件等。不僅在版本和編譯選項上,而且在運行時可調參數(例如,預讀設置)上。

DIY。
測試它!請參閱Advanced Programing in UNIX Environment第3.9章「I/O效率」可以直接確定某個特定系統的最佳讀寫緩衝區大小。