目录
一、VC6 标准分配器的实现
VC 中的 allocator 只是实现了到 _Allocator -> operator new -> malloc 的调用,实际并未实现优化的内存管理。也就是说通过 VC 编译器 allocator 所获得的内存都带有 cookie。内存分配时,需要的元素个数与元素类型作为参数传入 allocate,在其后面的计算中才实现了计算需要多少以字节为单位的实际内存的操作。
二、G2.9 分配器的实现
G2.9 所使用的 allocator 并不是传统的形式,而是具有独有特性的 alloc。调用时参数就是所需要的内存大小,以字节为单位。
G4.9 中的 __pool_alloc 与 alloc的本质是相同的,实现了消除 cookie 的目的。
GCC 2.9 编译器中 — 使用独有的分配器 alloc:
- 通过一个链表组 free list,下标表示其下挂的不同大小的内存元素(8,16,24......),只有每个链表组下申请的一大块内存会有 cookies 冗余,其内部的内存被分为相等的小块存储内容,以指针连接起来,小块就不再有冗余的问题。
- alloc 维护了16条链表组成的链表组,当所需要的管理内存超过16组时,使用传统的 malloc 管理。
- 每次申请内存时