【发布时间】:2012-12-09 19:11:09
【问题描述】:
我的任务很简单:在 Linux 上用 C++ 读取和解析一个大文件。有两种方式:
-
逐字节解析。
while(/*...*/) { ... = fgetc(...); /* do something with the char */ } -
按缓冲区解析缓冲区。
while(/*...*/) { char buffer[SOME_LARGE_NUMBER]; fread(buffer, SOME_LARGE_NUMBER, 1, ...); /* parse the buffer */ }
现在,逐字节解析对我来说更容易(不检查缓冲区有多满等)。不过听说大篇幅阅读效率更高。
什么是哲学? “最佳”缓冲内核的任务,所以当我调用fgetc() 时它已经被缓冲了?还是建议我处理它以获得最佳效率?
此外,除了所有哲学:Linux 上的现实是什么?
【问题讨论】:
-
你也可以使用
mmap(),把阅读等的工作留给内核,不用管这个。 -
@fge: 除了
mmap仅适用于本地文件,不适用于远程文件系统上的远程文件。 -
顺便说一句,
getc可能比fgetc更有效。后者会导致函数调用开销。 -
"程序员的任务还是内核的任务?" - 好吧,内核程序员。
标签: c++ performance io kernel buffer