一种内存池的预分配

以前做内存池的时候,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.源码更多的在于数据结构的支持。

 

posted @ 2012-05-07 10:25  westfly  阅读(428)  评论(0编辑  收藏  举报