make_shared性能单一与双重分配

时间:2016-08-29 12:51:52

标签: c++11 shared-ptr

我根据我在http://www.umich.edu/~eecs381/handouts/C++11_smart_ptrs.pdf

中读到的信息进行了一些测试

测量的目的是检查shared_ptr的单次分配和双重分配(坏样式)需要多少时间。我假设单个分配应该比双重分配耗时少。 所以我想知道我是否误解了某事或内存分配与时间无关。

测试代码:

#include <iostream>
#include <memory>
#include <chrono>
#include <string>

using namespace std;


class Test{
private:
        int value;
        string name;
        double value2;
public:
        Test(int v, string n, double v2) : value(v), name(n), value2(v2){}
        ~Test(){}
};


void singleAllocation(){
        chrono::system_clock::time_point start = chrono::system_clock::now();
        for(int i = 0; i < 3000; i++)
                shared_ptr<Test> sp(make_shared<Test>(10, "This is simple test", 2.3334));


        chrono::system_clock::time_point end = chrono::system_clock::now();
        cout<<"single allocation of 3000 objects took "
            <<chrono::duration_cast<chrono::microseconds>(end - start).count()
            <<"us.\n";
}

void doubleAllocation(){
        chrono::system_clock::time_point start = chrono::system_clock::now();
        for(int i = 0; i < 3000; i++)
                shared_ptr<Test> sp(new Test(10, "This is simple test", 2.3334));
correlaction

        chrono::system_clock::time_point end = chrono::system_clock::now();
        cout<<"\n\ndouble allocation of 3000 objects took "
            <<chrono::duration_cast<chrono::microseconds>(end - start).count()
            <<"us.\n";

}


int main(){
        singleAllocation();
        doubleAllocation();
}

输出: 单个分配3000个对象需要2483us。

3000个对象的双重分配花了1226us。

1 个答案:

答案 0 :(得分:-2)

时间成本最高的是从char *构造一个字符串,即对字符串进行“这是一个简单的测试”。删除字符串成员,添加一个优化编译器标志,即-O3,您将得到预期的结果。