欢迎来到天天文库
浏览记录
ID:40556698
大小:25.00 KB
页数:4页
时间:2019-08-04
《i++与++i哪个效率更高》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、考点:i++和++i的效率比较。出现频率:★★★解析:简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被适用,而是仅仅简单地用于增加一元操作数,答案是明确的,前缀法和后缀法没有任何区别。编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁地在二者之间制造任何差异。示例程序如下。1#include23intmain()4{5inti=0;6intx=0;78i++;9++i;10x=i++;11x=++I;12return0;3}上面的代码在
2、VISUALC++6.0上编译得到的汇编如下:;Line5movDWORDPTR_i$[dbp],0;Line6movDWORDPTR_i$[dbp],0;Line8moveax,DWORDPTR_i$[ebp]addeax,1movDWORDPTR_i$[ebp],eax;Line9moveax,DWORDPTR_i$[ebp]addeax,1movDWORDPTR_i$[ebp],eax;Line10movedx,DWORDPTR_i$[ebp]movDWORDPTR_x$[ebp],edxmoveax,DWORDPTR_i$[ebp]addeax,1movDWORD
3、PTR_i$[ebp],eax;Line11movedx,DWORDPTR_i$[ebp]addeax,1movDWORDPTR_x$[ebp],edxmoveax,DWORDPTR_i$[ebp]movDWORDPTR_i$[ebp],eax■代码段第8行和第9行生成的汇编代码分别对应Line8和Line9下面的汇编代码,可以看到3个步骤几乎完全一样。■代码段第10行和第11行生成的汇编代码分别对应Line10和Line11下面的汇编代码,可以看到都是5个步骤,只是在加1的先后顺序上有一些区别,效率也是完全一样的。由此说明,考虑内建数据类型时,它们的效率差别不大(取出编
4、译器优化的影响)。再考虑自定义数据类型(主要是指类)的情况。此时不需要再做很多汇编代码的分析,因为前缀是(++i)可以返回对象的应用,而后缀是(i++)必须返回对象的值,所以导致在大对象的时候产生了较大的复制开销,引起效率降低,因此使用自定义类型(注意不是指内建类型)的时候,应该尽可能地使用前缀式递增或递减。答案:在内建数据类型的情况下,效率没有区别。在自定义数据类型的情况下,++i的效率较高。
此文档下载收益归作者所有