实现引用计数

时间:2015-08-09 20:02:34

标签: c++ c++11 shared-ptr smart-pointers reference-counting

我正在开发一个使用多个(比如5M)对象的应用程序。

每个对象由单个std::shared_ptr组成,指向内存中的blob。每个内存blob都有不同的大小。

我想尽量减少分配,所以我想做std::make_sharedstd::allocate_shared之类的事情,这样就可以进行单一分配。

似乎这是不可能的(可能与Boost有关)
make_shared with custom new operator

下一个选项是自己实现引用计数:)。我知道这并不容易,最好有两个分配,而不是一些隐藏的bug,但我想探索这种可能性。

是否有一些现成的实现?

我也可以找到这个:
https://isocpp.org/wiki/faq/freestore-mgmt#ref-count-simple

2 个答案:

答案 0 :(得分:1)

似乎带有自定义分配器的allocate_shared确实是你的答案。

编写分配器并非易事,但也不是那么困难。这个概念在这里列出:

http://en.cppreference.com/w/cpp/concept/Allocator

快速谷歌搜索“c ++内存池分配器”揭示了一些现成的例子如下:

http://www.boost.org/doc/libs/1_58_0/libs/pool/doc/html/boost_pool/pool/interfaces.html

(在此页面上搜索“池分配器”)

答案 1 :(得分:1)

无需做任何工作。如果我理解你,那么你正在寻找的是增强intrusive_ptr,http://www.boost.org/doc/libs/1_58_0/libs/smart_ptr/intrusive_ptr.html

每个对象只有一个分配的引用计数。