fgetc和getc,哪个速度快?

tianjiao85 2008-05-13 09:49:08
看到一本书,前面说调用fgetc所需时间可能长于调用getc,因为调用函数通常所需的时间长于调用宏,
。。。
此书后面又说,fgetc版本较使用getc版本要快得多,不知道究竟哪个快了。
新手学习,请大侠帮忙。
...全文
710 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Laozql 2009-04-04
  • 打赏
  • 举报
回复
mark
mymtom 2008-05-14
  • 打赏
  • 举报
回复
[code=BatchFile]
ISO C99
The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
may evaluate stream more than once, so the argument should never be an expression
with side effects.

FreeBSD
The getc() function acts essentially identically to fgetc(), but is a macro that expands in-line.

HP-UX
fgetc Same as getc but is a function rather than a macro. is slower than
but it takes less space per invocation and its name can
be passed as an argument to a function.
[/code]
所以fgetc是一个函数
getc是一个宏
一般来说宏产生较大的代码,但是避免了函数调用的堆栈操作,所以速度会比较快。
但是也有例外的情况:
1. 很多RISC处理器(如SUN SPARC)使用寄存器窗口重叠技术,
(http://server.chinabyte.com/404/157904_1.shtml),
在寄存器充足的情况下,根本不需要堆栈操作,fgetc函数比getc宏更快
2. 在多线程的情况下,为了线程同步,getc和fgetc可能是相同的。
tianjiao85 2008-05-14
  • 打赏
  • 举报
回复
谢谢mymtom

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧