x=x+1, x+=1, x++哪个效率高些?一个编程效率细节问题

  • 习惯性
  • 寄存器
  • 左右
  • 编译器
  • 计算机
  • Eagleson
  • LV5工程师
  • |      2017-06-08 17:40:45
  • 浏览量 1502
  • 回复:7

之前一直习惯性的认为x=x+1、x+=1和x++仅仅是书写表示方法的不同,没想到细细研究,差别还是不小的。

x=x+1 最低,因为它的执行过程如下:

  1. 读取右边变量 x 的内存地址;
  2. 执行 x+1;
  3. 读取左边变量 x 的内存地址;
  4. 将右边的值传给左边的变量 x(编译器并不认为左右两边的变量 x 的内存地址相同)。

首先寻找右面x的地址,然后读取地址中x的值,再在寄存器中将x的值加1,接着寻找左面x的地址(计算机是不知道左面的x就是右面的x的),再讲刚计算的结果存到左面的x的地址中。

x=+1 其次,它的执行过程如下:

  1. 读取右边变量 x 的内存地址;
  2. 执行 x=1;
  3. 将得到的值传给变量 x (因为变量 x 的内存地址已经读出)。

寻找x的地址,然后读取地址中x的值,再在寄存器中将x的值加1,接着将计算结果存到x的地址中(这里计算机知道读与写两个操作的地址是相同的)。

x++ 最高,它的执行如下:

  1. 读取右边变量 x 的内存地址;
  2. 变量 x 自增1。

寻找x的地址,然后读取地址中x的值,然后直接将地址中的值加1。

从上面的过程可以看出,x++比x+=1少了一个写的过程,而x+=1比x=x+1少了一个寻址的过程(查找左面x的地址),所以三条语句的效率是x = x + 1 < x += 1 < x++ 。

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
呆呆木 2017-06-09
0   回复
举报
发布
Eagleson 回复 2017-06-09
:handshake
0   回复
举报
apleilx 回复 2017-06-12
其实对于现在的编译器来说,开启了优化功能后,这几种写法的编译结果是一模一样的,看反汇编码就知道了,都是INC xxx
1   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子