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

 

相关文章:

  • 2021-12-22
  • 2021-07-28
  • 2022-01-29
  • 2022-01-21
  • 2021-10-08
  • 2021-11-16
  • 2022-12-23
猜你喜欢
  • 2022-01-26
  • 2021-09-08
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-31
相关资源
相似解决方案