【发布时间】:2012-02-12 03:25:52
【问题描述】:
list<mpz_class> baseFactor;
1)
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()函数返回的值不会改变,所以它必须在每个循环中调用它。 -
你是如何进行计时/分析的?如果缓存是热的,那么第二个肯定会加快速度。此外,检查生成的 ASM,您应该几乎看不到任何变化。
-
你开启优化了吗?
-
在#2 中,将“size”声明为“const int”而不是简单的“int”。并在 for 循环中将“i”声明为内联变量“for (int i = 0; i
标签: c++ optimization g++