为什么看起来boost::shared_ptr的构建速度越来越慢?
我对boost shared_ptr有问题。循环中智能指针的初始化时间在第一次迭代后增加。 第一次迭代需要40毫秒。每隔一次迭代大约需要400毫秒。 我不知道为什么会这样。我检查过了,没有内存泄漏,所有的析构函数都被调用了。有人能解决这个问题吗 然而,当我使用boost::ptr_向量时,时间并没有增加(只在调试版本中增加) 见示例:为什么看起来boost::shared_ptr的构建速度越来越慢?,boost,shared-ptr,smart-pointers,Boost,Shared Ptr,Smart Pointers,我对boost shared_ptr有问题。循环中智能指针的初始化时间在第一次迭代后增加。 第一次迭代需要40毫秒。每隔一次迭代大约需要400毫秒。 我不知道为什么会这样。我检查过了,没有内存泄漏,所有的析构函数都被调用了。有人能解决这个问题吗 然而,当我使用boost::ptr_向量时,时间并没有增加(只在调试版本中增加) 见示例: class A; typedef boost::shared_ptr<A> A_ptr; class A { public: A(){} A_
class A;
typedef boost::shared_ptr<A> A_ptr;
class A
{
public:
A(){}
A_ptr add(A* new_A)
{
A_ptr new_A_ptr( new_A );
children.push_back(new_A_ptr);
return new_A_ptr;
}
~A(){}
vector<A_ptr> children;
};
void test()
{
A_ptr root_ptr( new A() );
for (int k=0; k<200; k++)
{
A_ptr sub_ptr = root_ptr->add( new A() );
for (int l=0; l<100; l++) sub_ptr->add( new A() );
}
};
int main()
{
for(int i=0; i<10; i++)
{
unsigned t = clock();
test();
std::cout<<"elapsed: "<<clock()-t<<std::endl;
}
return 0;
}
A类;
typedef boost::shared_ptr A_ptr;
甲级
{
公众:
A(){}
A_ptr add(A*新的_A)
{
A_ptr new_A_ptr(new_A);
儿童。推回(新的推回);
返回新的\u A \u ptr;
}
~A(){}
媒介儿童;
};
无效测试()
{
A_ptr root_ptr(新的A());
for(intk=0;kadd(新的A());
对于(int l=0;ladd(新的A());
}
};
int main()
{
for(int i=0;iclock()
是一个糟糕的时间计数器。你几乎不能用它来计算毫秒数。如果你在windows上,请使用monotic时钟或get time of day。或QueryPerformanceCounter
接下来,该测试不是测试共享的\u ptr构造时间,它主要测量对象A
分配时间。在共享的\u ptr
本身中也有一个用于存储ref计数的分配
使用make_shared
函数(而不是shared_ptr(新A)
)将所有这一切加速约2倍。您能否澄清一下:“循环中智能指针的初始化在第一次迭代后增加。”?什么初始化?参考计数?什么?循环中的第一次迭代的时间约为40毫秒,第二次迭代的时间约为400毫秒CI刚刚进行了测试,我不明白为什么时间会增加。