i++与++i的区别
2015-12-13 17:47
411 查看
众所周知的区别
i++和++i的区别应该是众所周知的,每一本c语言和c++的入门教程都会提及:对于i++,编译器会先取得i的值进行计算,然后再进行加1操作
而对于++i,编译器会先进行加1操作,然后拿着加1之后的值进行计算
本质区别
参与运算的情况
源代码int i = 9; int a = i++; int b = ++i;
汇编
movl $9, -20(%rbp) movl -20(%rbp), %edi movl %edi, %ecx addl $1, %ecx movl %ecx, -20(%rbp) movl %edi, -24(%rbp) movl -20(%rbp), %ecx addl $1, %ecx movl %ecx, -20(%rbp) movl %ecx, -28(%rbp)
有上面的汇编可知,当++i和i++参与运算时,i++需要先保存一下加1之前的值,所以比++i多执行了一条指令。可以说,对于上面的代码++i效率更高一些。
没有参与运算的情况
源代码int i = 9; i++; ++i;
汇编
movl $9, -20(%rbp) movl -20(%rbp), %edi addl $1, %edi movl %edi, -20(%rbp) movl -20(%rbp), %edi addl $1, %edi movl %edi, -20(%rbp)
通过上面的汇编可以看出,在当++i或i++不涉及到运算时,他们的指令是一样的,因此运算的效率是相同的
相关文章推荐
- RKHunterr系统检测
- 关于为什么负数要整数取反+1表示,而不指定首位为符号位,其它位为数值位。
- Android开发上传图片到服务器(一.图片选择)
- 浅谈Java中的对象和引用
- 第六章 访问ContentProvider共享数据
- django中使用chart.js的例子
- 初学linux的用户和权限管理
- 【转载】关于RAID 1+0和RAID 0+1的比较
- 编写程序输出杨辉三角
- CSS样式表~选择器、段落、样式篇
- Configure Many-to-Many(配置多对多关系)【Code-First系列】
- HDU-1166-线段树
- 需求 - 13 - “左右中”
- MySQL Proxy
- 最小生成树之Kruskal算法
- C#总结(三)
- iOS 应用程序的发布(和测试)证书 ,描述证书 的生成和 上线流程
- ubuntu上Apache+mod_wsgi的Django的部署
- SSH高性能并发的注意事项(个人总结)
- poj1961 Period