空闲链表(Free List)

把堆中空闲的块按照链表的方式连接起来,当用户请求一块空间的时候,可以遍历整个链表,直到找到合适大小的块并拆分他们,当用户释放空间的时候就拆分他们

Bitmap

将整个堆划分成大量的块,当用户请求内存的时候总是分配整数个块的空间给用户,第一个块称为已经分配的区域的头(Head),其余的称为主体(Body),所以一共三个状态两个 bits 就能表示,用数组存

实际上现实应用中,堆的分配算法往往是采用多种算法符合而成的,例如对于 glibc 来说,对于小于 64 byte 的空间申请是采用对象池,而大于 512 字节采用最佳适配算法,中间的采用上述方法的最佳折中策略,对于大于 128KB 的申请,会使用 mmap 机制直接向操作系统申请空间