i++与++i的区别与性能差异
2016-03-28 20:34
141 查看
腾讯考了一题关于i++和++i的性能问题。当时觉得大多书上用的都是i++,再者对两者的性能区别也并不是特别清楚,就随大流选i++了。
下文摘自http://www.gracecode.com/Archive/Display/1426
总而言之,i++; 是一个右值,而 ++i 是一个左值。
加深印象,上述的两条语句可以用下面两个函数表示。
i++ 为
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
++i 为
function () {
i = i + 1;
return i;
}
可以参考这里获知详情。总而言之,i++ 语句需要个临时变量,去存储返回自增前的值。
不要忽略这个变量的意义,了解过 C 等“低级”语言的朋友,可能会了解变量的内部机制(重新祭奠我老去的 C 语言知识)。首先,申请(malloc)一段内存空间,然后将值塞(push,压栈)进去,最后不用了释放(free)。
大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下,我建议使用 ++i ,虽然这点的优化非常的小。
因此,++i的性能将比i++的性能略好。上文对二者的函数解释相当精彩!
下文摘自http://www.gracecode.com/Archive/Display/1426
总而言之,i++; 是一个右值,而 ++i 是一个左值。
加深印象,上述的两条语句可以用下面两个函数表示。
i++ 为
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
++i 为
function () {
i = i + 1;
return i;
}
可以参考这里获知详情。总而言之,i++ 语句需要个临时变量,去存储返回自增前的值。
不要忽略这个变量的意义,了解过 C 等“低级”语言的朋友,可能会了解变量的内部机制(重新祭奠我老去的 C 语言知识)。首先,申请(malloc)一段内存空间,然后将值塞(push,压栈)进去,最后不用了释放(free)。
大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下,我建议使用 ++i ,虽然这点的优化非常的小。
因此,++i的性能将比i++的性能略好。上文对二者的函数解释相当精彩!
相关文章推荐
- 201603233第八章时间与第九章成本
- 2016年3月28日 第一次接触workerman-1
- 单链表(C语言)基本操作
- 如何带新近的程序员
- STL与泛型编程<十一>:Insert(安插)迭代器
- spring和hibernate整合使用getCurrentSession方法
- cron表达式详解
- 推送
- 文件的打开和关闭
- 【转】 java web开发之安全事项
- hdu 5637 Transform 最短路
- TCP面试题(一)之TCP的三次握手和accept()的顺序
- 可能导致Loadrunner检查点中savecount为0的分析
- java设计模式之工厂模式
- linux课程笔记--基础部分
- mysql查看表结构的几种方式
- GLUT文档
- C++实验2-项目1标准体重
- java第三次作业
- Leetcode 233. Number of Digit One