我根据我在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。
答案 0 :(得分:-2)
时间成本最高的是从char *构造一个字符串,即对字符串进行“这是一个简单的测试”。删除字符串成员,添加一个优化编译器标志,即-O3,您将得到预期的结果。