为什么重新定义运算符删除比原始运算符删除更快?

时间:2015-10-31 17:27:45

标签: c++

有2个班级

类DataOri和类DataMod几乎相同,除了operator new / delete。

我为类DataMod重新定义了operator new / delete。

class DataOri
{
    int v1[100];
    char c1;
    int v2[7];
    char c2;

    public:
         DataOri();
}

class DataMod
{
    int v1[100];
    char c1;
    int v2[7];
    char c2;

public:
    DataMod();

    static void* operator new (size_t size)
    {
        if (GetReporter())
        {
            ++(GetReporter()->AllocNodeCount());
        }
        return malloc(sizeof(DataMod));
    }

    void operator delete (void *p)
    {
        free(p);
        if (GetReporter())
        {
            --(GetReporter()->AllocNodeCount());
        }
    }
}

我估计新/删除时间为1000000次

DataOri新时间[485838]

DataOri Del Time [821767]

DataMod New Time [499649]

DataMod Del Time [808503]

我可以理解DataMod New比DataOri New

因为DataMod New做了更多的事情,增加了计数

但我无法理解DataMod Del Time比DataOri Del Time更快

甚至DataMod Del也会做更多事情,减少计数

0 个答案:

没有答案