0

我测试了我的程序,并决定将BOOST_FOREACH宏更改为简单的for循环const_iterator

我收到了意想不到的结果:使用for.

然后我写了一个小测试应用程序:

std::vector<int> vec;
for (int i = 0; i != 50000000; ++i)
    vec.push_back(i);



time_t t1 = clock();
int sum1 = 0;
for (std::vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it)
    sum1 += *it;
std::cout << ulong(clock() - t1);

time_t t2 = clock();
int sum2 = 0;
BOOST_FOREACH(auto &it, vec) {
    sum2 += it;
}
std::cout << ulong(clock() - t2);

这是输出:

34963
26964

为什么这样?

4

1 回答 1

5
  1. 您的代码中有未定义的行为。0+...+50,000,000 的总和远远超过 MAX_INT。整数溢出 == 未定义行为,未定义行为== 您的测试无效。

  2. 假设您构建了完全优化的项目,我猜测结果的发生是因为 CPU 预热以及在第二个基准测试中,一些数据已经被缓存。尝试切换 benchmarkimg 测试,看看会发生什么

于 2016-05-27T11:13:19.260 回答