深入理解FastMM4内存管理器:原理、优化与实践
1. FastMM4内存管理器概述
FastMM4并非单一的内存管理器,而是集三种不同的子系统于一体,分别为小内存块分配器、中等内存块分配器和大内存块分配器。各分配器的职责和管理策略如下:
| 分配器类型 | 处理内存块大小 | 管理策略 |
| — | — | — |
| 小内存块分配器 | 小于2.5KB | 共有56个小内存分配器,每个仅服务于一种大小的内存块,从8字节开始,以特定间隔递增,直至2608字节。它们从中等内存块分配器获取内存。 |
| 中等内存块分配器 | 2.5KB - 160KB | 从大内存块分配器获取内存,将大内存块切割成小内存块,并使用链表管理未使用的内存部分。 |
| 大内存块分配器 | 大于160KB | 直接通过调用Windows的 VirtualAlloc 函数获取内存,以4KB为单位分配,可能会浪费部分内存,但对程序影响不大。 |
小内存块分配器是FastMM4的核心亮点。每个内存分配请求可能会浪费一些内存,但分配器的大小经过精心选择,通常浪费的内存量低于10%。每个分配器本质上是一个由等大小元素(内存块)组成的数组,未使用的元素通过链表连接,便于快速查找空闲元素。
2. FastMM4的内存重分配优化
FastMM4在处理字符串或数组小幅度调整大小时,采用了一种巧妙的策略。当首次调整内存大小时,若为小内存块分配器,新内存块的最小大小将至少为原内存块大小的两倍加上32字节。例如,一个24字节的字符串添加一个字符后,请求将从24字节扩大到26字节,但FastMM4会将其向上取整为80字节(
超级会员免费看
订阅专栏 解锁全文
931

被折叠的 条评论
为什么被折叠?



