Exi*_*xiD 0 c++ macros boost const-iterator
我测试了我的程序,并决定将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);
Run Code Online (Sandbox Code Playgroud)
这是输出:
34963
26964
Run Code Online (Sandbox Code Playgroud)
为什么这样?
小智 5
您的代码中有未定义的行为.0 + ... + 50,000,000的总和超出了MAX_INT.整数溢出==未定义的行为,未定义的行为==您的测试无效.
假设您构建了完全优化的项目,我猜测结果是因为CPU预热而发生的,并且由于在第二个基准测试中,某些数据已经被缓存.尝试切换benchmarkimim测试,看看会发生什么
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |