我必須使用read
函數讀取C文件中的大文件。我只是想知道在性能方面我們保留了什麼樣的緩衝區大小。文件大小可能會達到幾十GB。用於讀取文件的最佳緩衝區大小C
11
A
回答
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 size和Advanced Format塊大小)。
更長的版本。
在UNIX中,它依賴於內核,libc,文件系統,硬件等。不僅在版本和編譯選項上,而且在運行時可調參數(例如,預讀設置)上。
DIY。
測試它!請參閱Advanced Programing in UNIX Environment第3.9章「I/O效率」可以直接確定某個特定系統的最佳讀寫緩衝區大小。
相關問題
- 1. 用於讀取進程寫入的最佳緩衝區大小
- 2. 最佳文件緩衝區讀取大小?
- 3. 最佳緩衝區大小 - TCP
- 4. Android最佳緩衝區大小
- 5. Delphi中的文件流 - 最佳緩衝區大小
- 6. 使用緩衝區來讀取未知大小的文件
- 7. 爲什麼Hadoop API FSDataInputStream的讀取小於緩衝區大小?
- 8. C Windows緩衝區大小
- 9. 獲取緩衝區大小
- 10. C++緩衝文件讀取
- 11. I/O輸出取決於讀者的緩衝區大小
- 12. 讀取緩衝區C++
- 13. 從緩衝區讀取C
- 14. 爲什麼boost :: asio :: read緩衝區的數據大小小於讀取大小?
- 15. Emacs ansi-term最大緩衝區大小?
- 16. ObjectOutputStream最大緩衝區大小
- 17. Objective-C:從URL中讀取特定緩衝區大小
- 18. 使用send()時是否存在「最佳」緩衝區大小?
- 19. 讀取緩衝區中的* .wav文件
- 20. 防止超大緩衝區文件的最佳方法?
- 21. 緩衝區大小大於在MPI_SEND
- 22. JSP和自動刷新屬性的最佳緩衝區大小
- 23. 閱讀jpeg文件char *緩衝區c
- 24. C中字符緩衝區的最大大小?
- 25. C中的緩衝區大小
- 26. python文件讀取緩衝區邊界
- 27. 緩衝區大小=文件大小對Rails send_file有用嗎?
- 28. 將輸入流讀取到緩衝區的最佳方法
- 29. BufferedInputStream的緩衝區大小
- 30. execv的緩衝區大小
當然緩衝區大小很重要,但「最佳」取決於。 –
合理範圍內越大越好。使用兩個冪的緩衝區大小(或至少是512的倍數)會有一些小優點。 –
@HotLicks你能解釋一下爲什麼'512' –