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