在分析我的应用程序后,我发现 s 太多了malloc
。我很惊讶,shared_ptr
并shared_array
为引用计数分配了内存。除此之外,封装引用计数的对象包含两个计数uses_count
以及weak_count
指向虚拟表的指针。对我来说,当我只需要一个简单的引用计数类时,这似乎有点过头了。有什么方法可以调整shared_ptr
和shared_array
实施更简单的方案吗?无需额外调用malloc
且仅使用一个计数器:uses_count
. 或者也许在 STL 或 Boost 的某个地方有一个更简单的类?
问问题
205 次
2 回答
4
如果使用boost::make_shared
,该函数将在一次调用中为 ref 计数器和对象分配内存new
。弱引用的额外计数器应该不是什么大问题,因为它只有额外的 4 或 8 个字节不会受到伤害。
如果分析显示shared_ptr
的实现仍然是您的应用程序的瓶颈,请考虑使用boost::intrusive_ptr
. 还要寻找通过引用而不是通过值传递 shared_ptrs 或通过移动它们来传递它们(如果需要副本)。当然,如果你可以使用unique_ptr
你应该更喜欢那些而不是shared_ptr
s
于 2013-07-08T14:53:23.687 回答
0
shared_ptr<A> sp( new A(), A_Deleter(), My_allocator<A>() );
template <typename T>
class My_allocator
{
...
T * allocate(const size_t n) const {
return singleton_pool<T,sizeof(T)>::malloc();
}
....
};
我认为您抱怨内存使用问题。我发现 std 分配器可以解决它;
于 2013-07-11T02:50:38.007 回答