Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533997
  • 博文数量: 118
  • 博客积分: 3995
  • 博客等级: 中校
  • 技术积分: 1276
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-15 12:15
文章分类

全部博文(118)

文章存档

2014年(1)

2013年(1)

2010年(6)

2009年(27)

2008年(10)

2007年(33)

2006年(38)

2005年(2)

我的朋友

分类:

2007-10-25 20:32:29

x=x+1, x+=1, x++哪个效率高?
 
三个式子都实现x加1,<<程序员面试宝典>>里面说x=x+1(四步),x+=1(三步),x++(一步),说x++效率最好
其实不然,现代编译器都做的比较智能了,gcc编译后的结果这三个式子的结果是完全相同的:

如果x是临时变量(即函数内部定义的),c代码
void fun1(){
     int x=1;
     x=x+1;
}
void fun2(){
     int x=1;
     x+=1;
}
void fun3(){
     int x=1;
     x++;
}

编译后的汇编代码均为
movl  $1,-4(%ebp)       #初始化x=1,x在栈空间内
leal  -4(%ebp),%eax     #取x的地址
incl  (%eax)            #x加1
 
如果x是全局变量(函数外部定义的),则汇编代码均为
incl  x             #变量x在数据段
 
所以这三个式子的效率是一样的
阅读(1749) | 评论(2) | 转发(0) |
0

上一篇:c语言关键字之 extern

下一篇:C标准库

给主人留下些什么吧!~~

chinaunix网友2009-05-06 16:16:19

我用VC8的DEBUG版本反汇编代码看过,全部是一样的。但是release不知道。我看不出来。。谁能告诉我结果啊?

plaza022008-08-15 09:57:30

我用arm-linux-gcc 3.3.2试过,反汇编的代码也是三个相同,执行效率应该是一样的