博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【内存管理】内存池技术
阅读量:7080 次
发布时间:2019-06-28

本文共 677 字,大约阅读时间需要 2 分钟。

内存池是种用于分配大量大小相同的小块内存的技术,可以极大加快内存分配/释放过程.

MemPool技术的内存分配,释放速度非常快,达到O(1)级别.

缺点:

1).只能分配特定字节长度的内存,也就是说,MemPool不是通用内存管理器.

2).MemPool技术可能导致内存占用只增不减.

基本实现如下:

其中指针变量MemBlockHeader把所有申请的内存块(MemBlock)串成一个链表,以便通过它可以释放所有申请的内存.

FreeNodeHeader变量则是把所有自由内存结点(FreeNode)串成一个链表.

内存块大小一般固定为MemBlockSize字节(除去用以建立链表的指针外).

内存块在申请之初就被划分为多个内存结点,每个Node大小为ItemSize(小对象的大小),计MemBlockSize/ItemSize个.

MemBlock和FreeNode的示意图如下:

 

申请过程如下:

内存申请过程分为两种情况:

1).在自由内存结点链表(FreeNodeList)非空,分配过程只是从自由内存结点链表中摘下一个结点的过程.

2).否则,意味着需要一个新的内存块(MemBlock).需要重新申请,并将申请的MemBlock切割成多个Node.

释放过程如下:

释放过程只是把要释放的结点挂到自由内存链表(FreeNodeList)的开头即可.

STL的空间配置器,使用内存池的技术,解决小于128bytes块的分配.

其参用的是多级块大小的自由链表,自由结点参用union结构设计,减少额外的开销.

具体介绍,请参考 

参考资料:

 

转载地址:http://mhpml.baihongyu.com/

你可能感兴趣的文章
DevOps实战:Graphite监控上手指南
查看>>
SSPL的MongoDB再被抛弃,GUN Health也合流PostgreSQL
查看>>
知乎pure render专栏创办人@流形:选择React这条路,很庆幸
查看>>
修复.NET的HttpClient
查看>>
调查:Android的领先地位稳固
查看>>
在Maven项目中使用JUnit进行单元测试
查看>>
Docker发布应用程序指南
查看>>
你朋友圈里的广告是怎么做到合你胃口的?
查看>>
#第1天#《C Primer Plus》学习历程
查看>>
为什么说GraphQL可以取代REST API?
查看>>
亚马逊是如何进行软件开发的
查看>>
腾讯开源手游热更新方案,Unity3D下的Lua编程
查看>>
Kafka迎来1.0.0版本,正式告别四位数版本号
查看>>
Chef宣布100%开源,要走红帽模式?\n
查看>>
用实例讲解Spark Sreaming
查看>>
Visual Studio 15.8 Preview 3支持多点编辑功能
查看>>
我们究竟应不应该使用框架?
查看>>
如何用Kotlin Coroutines和Architecture Components进行Android开发?
查看>>
RxJava系列六(从微观角度解读RxJava源码)
查看>>
WWDC 2015大会十大看点总结:Swift要开源了
查看>>