内存池(MemPool)

来源:互联网 发布:小米电视 跳过wifi网络 编辑:程序博客网 时间:2024/06/05 03:24

话说内存池貌似是一个比较深刻的话题,每当想去尝试一下,然而深感自己积累不足;今天终于有积累,有时间会会内存池了。之前看过STL中Alloc,即空间配置器的设计思想以及实现;后续看过ACE的Block,都是关于内存池的不同见解。

 

今天有空实现了一个内存池,按照STL的空间空配置器的思想实现,就是用纵横链表管理内存块。横向的链表管理不同大小的内存块,纵向链表管理相同大小的内存块,为了不浪费内存,管理内存块的节点使用union,对外则是可以使用的内存的地址,对内则是指向下一个可用的内存块。

 

使用内存池的优点是显而易见的:

1.避免频繁的向系统申请释放造成内存碎片;

2.避免了每次使用内存都需要向系统申请(new或者malloc,每次new或者malloc,效率是低下的);

3.避免内存泄漏(自己管理内存的申请与释放,可以使用资源管理对象的思想)

 

缺点:

1.笔者实现的这个内存池,只有向系统申请,没有向系统归还;也就是说,内存占用到了一定阶段就会稳定,就算程序这时真正没有使用那么多内存,但是还会占用较多内存;

 

 

MemPool下载

 

 

原创粉丝点击