list<mpz_class> baseFactor;
int *tab = new int [baseFactor.size()]; //baseFactor.size() ~= 20000
for(i = 0; i < baseFactor.size(); i++){
cout << tab[i] << endl;
}
// Total time: 2.620790
2)
int size = baseFactor.size();
int *tab = new int [size]; //baseFactor.size() ~= 20000
for(i = 0; i < size; i++){
cout << tab[i] << endl;
}
//Total time: 0.366500
为什么g ++编译器不优化在2码1))?
我的猜测是,在第一种情况下,编译器不知道'size()'函数返回的值不会改变,所以它必须在每个循环中调用它。 – 2012-01-17 10:05:47
你是怎么做时间/分析的?如果缓存温暖,那么第二个肯定会加快速度。同样,检查生成的ASM,你应该看到很少或没有改变。 – Necrolis 2012-01-17 10:07:35
你打开了优化? – 2012-01-17 10:07:39