- 内存分配:动态内存分配器维护着一个进程的虚拟内存区域,堆。
- 设计:分段管理(方便归还group给操作系统),bitmap 设计,多对双向链表负责不同大小内存块管理,嵌入式指针,缓式回收。
- 特点:
- malloc,边界标记的概念是简单优雅的。
- 进行初始化,会去堆等区域拿一块内存作为malloc 管理内存的基本数据结构,比如header和region等数据结构。
- 共有16个header,一个header管理1MB内存
- 一个header 里有两根指针,32+64bit,一根指向管理区域region,一根指向1MB内存。
- region有一个指示性index (当前应该分配第几个group),和 32*64bit数组 ,32个group。32个group对应1MB内存,每个group管理32KB,8个page。32*64bit数组,每64bit对应一个group64对链条的状态。
- 一个group有64对指针和一个int计数器。分配一次加一,释放一次减一,管理1024/32 32kb,(8个page)。64对指针:第一对负责16字节,第二对负责16*2内存,依次类推,最后一对负责大于1024字节的内存。
- 每次分配内存的时候会带着cookie,需要调整一些边界。每分配一次,检查是否需要重新挂链条。初始的时候8个page都挂在最后一对链条上。
- free一次,检查是否需要合并操作,然后挂回相应的链条。相邻区块合并的动作很重要(需要借助cookie),避免过多碎片的产生。
- 判断一个group是否全回收的条件是group计数器是否为0。缓式设计(两个全回收group释放一个),回收一个group的时候,会有一个指针指向该header,当下一个group全回收,就归还一个。
标签:malloc,group,--,32,64bit,header,内存,候捷 From: https://www.cnblogs.com/wuyun--wy/p/17160277.html