我编写了一个通过fgetc读取整个文件的程序
while ((c = fgetc(f)) != EOF) { ... }但是节目太慢了。当我把fgetc改成fread时,
static unsigned char buf[4096];
while ((n = fread(buf, 1, sizeof(buf), f)) > 0) { ... }该程序的工作速度约为的10倍。
为什么?正如我所知道的,fgetc是一个缓冲函数,所以它应该和第二个版本的显式缓冲区一样快,不是吗?
发布于 2012-11-04 18:39:17
你住在商店附近。你需要100罐汤。哪一种更有效,100次到商店的旅行每次1次,还是1次去商店100罐?显然,1次旅行是因为每次旅行都需要时间的开销。
在fgetc的情况下,有各种各样的开销。
所有的汤都可以做一次,每个汤也可以做一次。单独地说,每一点开销都很小,但是当重复多次时,和就变得很重要了。
发布于 2012-11-04 17:47:31
使用fgetc,不仅可以获得更多的函数调用(每个函数调用都有其开销),而且fgetc还可以在多线程应用程序中使用锁(例如,POSIX强制执行)。
https://stackoverflow.com/questions/13225014
复制相似问题