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