永发信息网

为什么C语言中a+=2比a=a+2高效

答案:6  悬赏:40  手机版
解决时间 2021-11-29 23:56
  • 提问者网友:斑駁影
  • 2021-11-29 02:06
为什么C语言中a+=2比a=a+2高效
最佳答案
  • 五星知识达人网友:鸽屿
  • 2021-11-29 03:23
a+=2——寻找a的地址,取出内容,内容+2,将结果放回原处;
a=a+2——寻找右边a的地址,取出内容,内容+2,临时存储;再寻找左边a的地址,将前面计算的临时结果传入这个地址。编译器并不认为这两个a的地址是同一个,明显这比a+=2多出两个步骤。
尽管目前的编译器能智能优化,可能会把a=a+2的代码优化成与a+=2一样,但宏观上还应该是a+=2高效,因为优化不是必然进行的,而是尽力而为,因为若必然进行会带来其他不良后果。
全部回答
  • 1楼网友:深街酒徒
  • 2021-11-29 07:30
前面是把1加到a所在的内存,所以高效
后面是把a作为操作数参加运算,再赋值给a。多了个运算的过程
  • 2楼网友:深街酒徒
  • 2021-11-29 06:36
字符少了,计算机少处理额,
  • 3楼网友:舊物识亽
  • 2021-11-29 06:23
a+=2只需执行一条语句,a=a+2需要执行两条语句。追答复合赋值符这种写法,对初学者可能不习惯, 但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。
  • 4楼网友:冷風如刀
  • 2021-11-29 05:22
两个同样高效,书上写的编译技术已经过时了,现代的编译技术已经足够智能。
不信的话,你可以自己写两段代码,然后g++ -S成汇编指令,然后diff两个文件,会发现他们最终的汇编代码都是一样的。
  • 5楼网友:不甚了了
  • 2021-11-29 04:12
怎么就高效了,硬要说就是a=a+2逻辑上要先产生一个临时变量存tmp = a+2,然后再赋给a = tmp。不过实现上这两个就算不开编译器优化都没区别,你可以去检查下两者编译后的汇编代码。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯