首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fgetc太慢?

为什么fgetc太慢?
EN

Stack Overflow用户
提问于 2012-11-04 17:42:32
回答 2查看 2K关注 0票数 2

我编写了一个通过fgetc读取整个文件的程序

代码语言:javascript
复制
while ((c = fgetc(f)) != EOF) { ... }

但是节目太慢了。当我把fgetc改成fread时,

代码语言:javascript
复制
static unsigned char buf[4096];

while ((n = fread(buf, 1, sizeof(buf), f)) > 0) { ... }

该程序的工作速度约为的10倍

为什么?正如我所知道的,fgetc是一个缓冲函数,所以它应该和第二个版本的显式缓冲区一样快,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-04 18:39:17

你住在商店附近。你需要100罐汤。哪一种更有效,100次到商店的旅行每次1次,还是1次去商店100罐?显然,1次旅行是因为每次旅行都需要时间的开销。

在fgetc的情况下,有各种各样的开销。

  • 函数调用
  • 文件打开了吗?
  • 在档案结束的时候?
  • 缓冲区是空的吗?
  • 锁紧
  • 等。

所有的汤都可以做一次,每个汤也可以做一次。单独地说,每一点开销都很小,但是当重复多次时,和就变得很重要了。

票数 12
EN

Stack Overflow用户

发布于 2012-11-04 17:47:31

使用fgetc,不仅可以获得更多的函数调用(每个函数调用都有其开销),而且fgetc还可以在多线程应用程序中使用锁(例如,POSIX强制执行)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13225014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档