我很想知道i++
,i+=1
和i=i+1
中哪一个在CPU中运行得最快,我如何衡量其执行时间?
答案 0 :(得分:4)
i = i+1;
然后,随着硬件方面的成就,mainkind发明了以下记录
i += 1;
最后由于计算机科学的进步,人类发明了以下记录
++i;
和
i++;
所有这三种形式的记录都是同一组机器指令的表达式。(当它们是一些更复杂的表达式的一部分时,++ i和i ++有一个小的例外):)这套机器指令不是甚至取决于编译器优化的级别。:)
P.S。当然,我们正在讨论基础类型的这些运算符。没有任何意义来讨论用户定义类型的这些运算符,因为它们可以以各种方式重载。
答案 1 :(得分:1)
获取时间戳,并在退出循环时在循环和时间戳中执行其中一个。循环100万次,并比较每个循环的结果(例如,每个不同类型的一个定时循环)。如果您使用的是嵌入式系统或非常慢的东西,请减少迭代次数。你只需要足够的循环来实现明显的差异。
编译器不同,它们会进行优化。一个好的编译器可能会为每个编译器生成相同的代码,因此您可能看不到任何差异。
使用操作系统提供的最高分辨率时间戳生成功能(如微秒或纳秒)。如果无法获得足够高的分辨率时间戳功能,请增加迭代次数,以便进行有意义的比较。
同时关闭优化并查看生成的时间是否不同。看看你是否可以让编译器向你展示相当的机器语言以获得更多的理解。
答案 2 :(得分:1)
除非您有严重损坏的编译器,否则这些都将生成完全相同的代码。试一试,看看每个的输出。