现在的位置: 首页 > 综合 > 正文

a++和++a的压栈

2013年01月10日 ⁄ 综合 ⁄ 共 411字 ⁄ 字号 评论关闭

 

很简短的代码,输出是什么呢?

b = 6 c = 7 d = 4 e = 7 f = 2 g = 7


对结果如是理解:压栈从右往左,GFEDCB的顺序,压栈前要对a进行计算,由于FDB是a++所以2、4、6,而剩下是++a,所以要等a自增计算完,所以都是7。


有一个问题是:编译器怎么做到的呢?


Go to Dessembly说出了迷底。对于a++的结果,是有ebp寻址函数栈空间来记录中间结果的,在最后给printf压栈的时候,再从栈中把中间结果取出来;而对于++a的结果,则直接压寄存器变量,寄存器经过了所有的自增操作。

这就是a++和++a的压栈的区别。

抱歉!评论已关闭.