我选择了David的答案,因为他是唯一一个在没有优化标志的for循环中提供解决方案的人.其他答案说明了在设置优化标志时会发生什么.
Jerry Coffin的回答解释了为此示例设置优化标志时会发生什么.仍然没有答案的是,当B执行一次额外的内存引用和每次迭代一次添加时,superCalculationA的运行速度比superCalculationB慢.Nemo的帖子显示了汇编输出.-S根据Matteo Italia的建议,我在我的PC上确认了这个标志,2.9GHz Sandy Bridge(i5-2310),运行Ubuntu 12.04 64位.
当我偶然发现以下情况时,我正在试验for循环性能.
我有以下代码以两种不同的方式执行相同的计算.
#include <cstdint>
#include <chrono>
#include <cstdio>
using std::uint64_t;
uint64_t superCalculationA(int init, int end)
{
uint64_t total = 0;
for (int i = init; i < end; i++)
total += i;
return total;
}
uint64_t superCalculationB(int init, int todo)
{
uint64_t total = 0;
for (int i = init; i < init + todo; i++)
total += i;
return total;
}
int main()
{
const uint64_t answer = 500000110500000000; …Run Code Online (Sandbox Code Playgroud)