假设这样的一个例子:
“`c
int p = -1;
int y = 0;
y = p++ + ++P;
先分析一下它的汇编代码(没有优化):
```c
subl $40, %esp ; 分配40字节
movl $1, -16(%ebp) ; 存储 p
movl $0, -12(%ebp) ; 存储 y
movl -16(%ebp), %eax ; 这3步执行 p++
leal 1(%eax), %edx
movl %edx, -16(%ebp)
addl $1, -16(%ebp) ; 这2步执行 ++p
movl -16(%ebp), %edx
addl %eax, %edx ; 相加操作
movl %edx, -12(%ebp) ; 结果写回 y
可以看出p++需要3步,++p需要2步,而且修改p的值是不一样的,看出++p的效率比p++的高。
另外:
- 如果只考虑自定义类型的话,两者是没有区别的,但对于自定义类型,如类,i++(右值),创建临时变量,把i的值赋给它,然后返回临时变量。++i对i执行+1后返回i