运营商是否超载减速性能?

时间:2015-04-29 00:58:49

标签: c++ overloading operator-keyword

我试图制作内存池类并且必须重载operator [],但是这是一个巨大的(2x)减速:

  • T(过载)= 76.4043 ns
  • T(not-ovld)= 28.6016 ns

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

编译器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;
}

1 个答案:

答案 0 :(得分:0)

问题在于Debug版本,在Release版本(优化n东西)中,所有工作都应该如此。呵呵愚蠢的错误,但教我一些东西:) 结论 - 不要在调试模式下测量性能;)