boost之pool源码解析

看完了c++设计新思维中的内存池实现,再粗略看下boost中pool的实现。可以看出两者有些相似之处。

查看罗剑锋的boost程序库完全开发指南会发现对内存池pool讲解甚是简单
没有标明任何注意事项,认为使用简单,随便使用,其实里面有很多使用不当,反而会效果更差
boost中有如下几个类型的pool,object_pool,singleton_pool

我们一个一个来进行解析
poolfwd.hpp中有如下几个申明,保证了pool使用时不用指定模板参数
template <typename UserAllocator = default_user_allocator_new_delete>
class pool;

template <typename T, typename UserAllocator = default_user_allocator_new_delete>
class object_pool;


template <typename Tag, unsigned RequestedSize,
typename UserAllocator = default_user_allocator_new_delete,
typename Mutex = details::pool::default_mutex,
unsigned NextSize = 32,
unsigned MaxSize = 0>
struct singleton_pool;

//
先看pool的实现
而在pool.hpp中,如果没看到前面的pool前置申明,会想不明白,为什么pool可以不指定模板参数的
template <typename UserAllocator>
class pool: protected simple_segregated_storage<
typename UserAllocator::size_type>

构造函数指定的几个参数
explicit pool(const size_type nrequested_size,
const size_type nnext_size = 32,
const size_type nmax_size = 0)
默认情况下我们会指定第一个参数,即每次分配的大小(malloc分配的大小)
其实另外两个参数也是有含义的,以下是三个参数的含义
requested_size:需要外部传入
next_size, 默认为32
start_size:默认就是next_size
max_size:默认为0

比如我们设置pool的requestsize是32byte,那么它默认会为我们分配
next_size * requestsize这么一块大的内存,分配完后,会把next_size左移1位,就是变为了64.
当next_size * 32这么一块大的内存都被用完了,它就认为32太小,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值