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

标签 c++ boost stl

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

最佳答案

如果您使用 boost::make_shared,该函数将在对 new 的一次调用中为引用计数器和对象分配内存。 弱引用的额外计数器应该不是一个大问题,因为它只是一个额外的 4 或 8 个字节,不会造成伤害。
如果分析显示 shared_ptr 的实现仍然是您应用程序的瓶颈,请考虑使用 boost::intrusive_ptr。还要寻找通过引用而不是通过值传递 shared_ptr 的方法,或者如果需要拷贝则通过移动它们来传递它们。当然,如果你可以使用 unique_ptr,你应该更喜欢 shared_ptrs

关于c++ - shared_ptr 和 shared_array 为引用计数器分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529519/

相关文章:

c++ - 我无法从另一个类调用我的 main 中的函数

c++ - 扭曲如何与原子操作一起工作?

c++ - 将 <string, function pointer> 插入 map

c++ - glBlendFunc() 的负色?

c++ - wxTextCtrl 类的 GetValue 方法使我的应用程序崩溃

c++ - Boost::GIL bits8* 到 gray8_ptr_t 没有 reinterpret_cast?

c++ - Windows 上的链接 boost 问题

c++ - Boost.Asio SSL 上下文未验证证书

c++ - C++ 中的 STL 和重载

c++ - 将 STL 算法限制为 N 个元素