我正在开发一个使用多个(比如5M)对象的应用程序。
每个对象由单个std::shared_ptr
组成,指向内存中的blob
。每个内存blob
都有不同的大小。
我想尽量减少分配,所以我想做std::make_shared
或std::allocate_shared
之类的事情,这样就可以进行单一分配。
似乎这是不可能的(可能与Boost有关)
make_shared with custom new operator
下一个选项是自己实现引用计数:)。我知道这并不容易,最好有两个分配,而不是一些隐藏的bug,但我想探索这种可能性。
是否有一些现成的实现?
我也可以找到这个:
https://isocpp.org/wiki/faq/freestore-mgmt#ref-count-simple
答案 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。
每个对象只有一个分配的引用计数。