我必须使用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. C Windows缓冲区大小
- 8. 获取缓冲区大小
- 9. C++缓冲文件读取
- 10. I/O输出取决于读者的缓冲区大小
- 11. 从缓冲区读取C
- 12. 读取缓冲区C++
- 13. 为什么boost :: asio :: read缓冲区的数据大小小于读取大小?
- 14. ObjectOutputStream最大缓冲区大小
- 15. Emacs ansi-term最大缓冲区大小?
- 16. Objective-C:从URL中读取特定缓冲区大小
- 17. 使用send()时是否存在“最佳”缓冲区大小?
- 18. 防止超大缓冲区文件的最佳方法?
- 19. 读取缓冲区中的* .wav文件
- 20. 缓冲区大小大于在MPI_SEND
- 21. JSP和自动刷新属性的最佳缓冲区大小
- 22. 阅读jpeg文件char *缓冲区c
- 23. C中字符缓冲区的最大大小?
- 24. C中的缓冲区大小
- 25. python文件读取缓冲区边界
- 26. 缓冲区大小=文件大小对Rails send_file有用吗?
- 27. 将输入流读取到缓冲区的最佳方法
- 28. execv的缓冲区大小
- 29. BufferedInputStream的缓冲区大小
- 30. 的libcurl下载文件的大小超过缓冲区大小
当然缓冲区大小很重要,但“最佳”取决于。 –
合理范围内越大越好。使用两个幂的缓冲区大小(或至少是512的倍数)会有一些小优点。 –
@HotLicks你能解释一下为什么'512' –