是运算符重载减慢性能

is the operator overloading slow down performance?

本文关键字:慢性 性能 重载 运算符      更新时间:2023-10-16

im 试图使内存池类并且必须重载运算符 [],但速度非常慢(2x):

  • T(过载) = 76.4043 ns
  • T(非卵形) = 28.6016 ns

这是正常的还是我做错了什么?感谢您的帮助:)

编译器 VC++2013优化禁用/完全 - 相同的事情

类(主.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]; }
};

(主.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;
}

问题出在调试构建中,在发布构建(优化 n 东西)中,所有工作都像它应该的那样。呵呵愚蠢的错误,但教会了我一些:)结论 - 不要在调试模式下测量性能;)