shared_ptr和shared_array为引用计数器分配内存
shared_ptr and shared_array allocate memory for reference counter
在分析我的应用程序后,我发现malloc
太多了。我很惊讶shared_ptr
和shared_array
为引用计数分配了内存。此外,封装引用计数的对象包含两个计数uses_count
和weak_count
以及指向虚拟表的指针。对我来说,当我只需要一个简单的引用计数类时,这似乎有些过头了。有没有办法调整shared_ptr
和shared_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分配器可以解决这个问题;
相关文章:
- 循环在计数器中不起作用
- python集合的C++等价物是什么.计数器
- Python 集合.计数器,如何避免重复查找
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- std::shared_ptr 自定义参考计数器
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 不正确的比较和交换计数器输出用于快速排序功能
- 引用 std::shared:ptr 以避免引用计数
- OpenSSL API,使用GCM(伽罗瓦计数器模式)进行AES加密
- C++ 在循环中添加计数器变量并再次初始化其值
- 需要帮助才能在C++中创建类计数器
- 漂亮的计数器习语的错误或格式错误的静态订单惨败?
- 几乎总是自动和带计数器的循环
- 线程使用计数器C++
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 对于循环计数器不递增
- C++输出的就地计数器
- 在两个值之间嵌入C计数器
- 无法使用 libtool 将 -shared 参数传递给 g++