一种内存池的预分配

以前做内存池的时候,google到了 Wolf Software的Mempool Library,下载地址如下

http://www.wolf-software.com/downloads/system-libraries/memory/mempool/

最近抽时间将源码看了下,做了个图。

这份实现还是很传统的,很好理解。

有三个重要的结构

顶端的mempool,处于中间层的mempool_table,以及最底层与实际分配相关的mempool_entry。

下图是它们之间的关系

1.mempool中的smallest_block和largest_block为2^n。在mempool中管理的mempool_table size也会通过calculate_memory_block_size规整到2^n。

2.在分配的底端,都是用的C中calloc分配的。

3.为了支持预分配,提供了mempool_preallocate_list结构

typedef struct mempool_preallocate_list_struct
{
  int                          size;           /*!< The size of the table (memory block). */
  int                          count;          /*!< The number of blocks to pre-allocate. */
} mempool_preallocate_list;

并提供了mempool_preallocate接口

extern void     mempool_preallocate   ( mempool **pool, mempool_preallocate_list preallocate_list[] );

4.下图是mempool提供的接口函数调用图(用GraphViz画的,含有下划线的变量名如何显示?)

 

 总结

1.源码并没有考虑操作系统层面的,没有互斥等多线程支持。

2.源码更多的在于数据结构的支持。

 

转载于:https://www.cnblogs.com/westfly/archive/2012/05/07/2487013.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值