谁更快:BOOST_FOREACH宏或for

时间:2016-05-27 11:03:54

标签: c++ boost macros const-iterator

我测试了我的程序,并决定使用BOOST_FOREACHfor宏更改为简单的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

为什么这样?

1 个答案:

答案 0 :(得分:5)

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

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