if(!n) ,if(n),和if(x==n) 哪个速度更快 为什么

marsmjx 2009-01-07 11:19:51
if(!n) ,if(n),和if(x==n)哪个速度更快 为什么 具体有多大差距
如果有
for(i=0;i<70000;i++)
{
if(...)
}
三种情况差距大吗 具体能差多少个count
...全文
251 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-01-11
  • 打赏
  • 举报
回复
编译优化化,在目前的CPU上,如果单看这一行代码,三种都一样快,如果n是前面运算的结果,则if(x==n)比另两种要慢一点。
土豆 2009-01-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gooogleman 的回复:]
引用楼主 shiyiytt 的帖子:
if(!n) ,if(n),和if(x==n)哪个速度更快 为什么 具体有多大差距
如果有
for(i=0;i <70000;i++)
{
if(...)
}
三种情况差距大吗 具体能差多少个count


这个我没有注意,只是在林锐的书里
提倡if(!n) ,if(n),不提倡if(n=1)的写法,
[/Quote]

从CPU乱序执行和分支预测来说,上面三个比较语句谁的命中率高谁的效率就会更高。在你的例子中,if(n)应该效率最高,导致最少流水线预取失败;而if(!n)和if(x==n)的效率是一样的,都是只有一次流水线的预取成功。

这问题意义不大,其实编译器都能替你优化。如果你如此关心效率,那就应该用汇编。作为C/C++程序员,我觉得应该关注更高效的算法(不是指你这种,比如是什么情况下用hash table,什么情况下用数组),更规范更简洁易懂的代码。如果一定要关心一个实现方面的问题,那处理好指针的问题,少点内存泄漏吧。

林锐这么说,大概也是因为他当时钻牛角尖了,站的角度不是那么开阔。
fjwyshan 2009-01-11
  • 打赏
  • 举报
回复
不懂,帮顶
noenoughmemory 2009-01-11
  • 打赏
  • 举报
回复
不懂,帮顶
noenoughmemory 2009-01-11
  • 打赏
  • 举报
回复
mark
xiangongda 2009-01-10
  • 打赏
  • 举报
回复
前两个 or 指令
后一个 cmp
你说那个快?
psic__ 2009-01-10
  • 打赏
  • 举报
回复
都一样快啊……
zwjchina 2009-01-10
  • 打赏
  • 举报
回复
if(!n) ,if(n),if(x==n)
逻辑意义都不一样,还比较啥
要比也是:
if(!n), if(n) 和 if(n==0), if(n!=0)
zheng1xi 2009-01-08
  • 打赏
  • 举报
回复
前两种会快很多~
因为后者多一个数值上判断的过程
xiaopoy 2009-01-07
  • 打赏
  • 举报
回复
当然if(n)最快.
gooogleman 2009-01-07
  • 打赏
  • 举报
回复
有空可以反汇编一下。
gooogleman 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 shiyiytt 的帖子:]
if(!n) ,if(n),和if(x==n)哪个速度更快 为什么 具体有多大差距
如果有
for(i=0;i <70000;i++)
{
if(...)
}
三种情况差距大吗 具体能差多少个count
[/Quote]

这个我没有注意,只是在林锐的书里
提倡if(!n) ,if(n),不提倡if(n=1)的写法,
shoooo 2009-01-07
  • 打赏
  • 举报
回复
有区别的
google "CPU 分支预测"

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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