我测试了我的程序,并决定使用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
为什么这样?
答案 0 :(得分:5)
您的代码中存在未定义的行为。 0 + ... + 50,000,000的总和超出了MAX_INT。整数溢出==未定义的行为,未定义的行为==您的测试无效。
假设您构建了完全优化的项目,我猜测结果是因为CPU预热而发生的,并且由于在第二个基准测试中,某些数据已经被缓存。尝试切换benchmarkimim测试,看看会发生什么