我试图制作内存池类并且必须重载operator [],但是这是一个巨大的(2x)减速:
是正常还是我做错了什么?谢谢你的帮助:)
编译器vc ++ 2013 优化禁用/完全 - 同样的事情
class(main.cpp):
template<class T>
class pool{
public:
T *cell;
size_t size = 0;
public:
pool(const size_t n ){
size = n;
cell = new T[size];
}
T& operator [](const size_t i) { return cell[i]; }
T operator [](const size_t i)const { return cell[i]; }
};
主(main.cpp中):
template<class T>
T F( T x){
return x/2 % 100;
}
#define test_count 10000000
int main()
{
pool<unsigned int> P(test_count);
unsigned int sum = 0;
resettimer();
// test 1
for (int i = 0; i < test_count; i++)
P[i] = F(i);
for (int i = 0; i < test_count; i++)
sum = sum + P[i];
cout << sum << endl;
//
printtimer();
sum = 0;
resettimer();
// test2
for (int i = 0; i < test_count; i++)
P.cell[i] = F(i);
for (int i = 0; i < test_count; i++)
sum = sum + P.cell[i];
cout << sum << endl;
//
printtimer();
int q;
cin >> q;
return 0;
}
答案 0 :(得分:0)
问题在于Debug版本,在Release版本(优化n东西)中,所有工作都应该如此。呵呵愚蠢的错误,但教我一些东西:) 结论 - 不要在调试模式下测量性能;)