shared_ptr和shared_array为引用计数器分配内存

shared_ptr and shared_array allocate memory for reference counter

本文关键字:shared 计数器 内存 引用 分配 array ptr      更新时间:2023-10-16

在分析我的应用程序后,我发现malloc太多了。我很惊讶shared_ptrshared_array为引用计数分配了内存。此外,封装引用计数的对象包含两个计数uses_countweak_count以及指向虚拟表的指针。对我来说,当我只需要一个简单的引用计数类时,这似乎有些过头了。有没有办法调整shared_ptrshared_array以实现更简单的方案?没有对malloc的额外调用,并且只有一个计数器:uses_count。或者STL或Boost中可能有一个更简单的类?

如果使用boost::make_shared,函数将在对new的一次调用中为ref计数器和对象分配内存。弱引用的额外计数器应该不是什么大问题,因为它只是额外的4或8个字节,不会有什么影响
如果评测显示shared_ptr的实现仍然是应用程序的瓶颈,那么考虑使用boost::intrusive_ptr。还要寻找通过引用而不是通过值传递shared_ptrs,或者如果需要副本,则通过移动它们来传递它们。当然,如果你可以使用unique_ptr,你应该更喜欢那些而不是shared_ptr

    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分配器可以解决这个问题;