标签:静态 思路 对象 一个 operator list 形式 区分 不同的
per-class allocator 2
tips: operator new重载 不会被派生类实际使用,因为父类大小内存的分配交给子类去调用明显是不正确的。实际上会被转交至 : : operator new.
operator delete:
使用例:
对pre-class allocator 2的个人理解:通过Union联合体实现内存空间 “待使用”(入池?)和“正在使用” (出池?) 两种状态的区分:
AirplaneRep 变量 是 ”正在使用“ 状态下的对象内容,Airplane * 指针作用是在 “待使用” 状态下以链表的形式维护 “内存池”(菜鸡如我并不知道这里能否被这么称呼)。
(注意malloc下分配的内存并不一定连续,故这里出现了下标和指针并用的古怪状况,同时视频中的图例也有些许迷惑性,不是很好理解)
成员operator new的作用如下所述:
当FreeList头部不为空,则有剩余,将FreeList头部指针右移一步长,并返回原头部位置作为new分配结果。若已为空,则内存不够,将在已分配的内存块后再分配BLOCK_SIZE * sizeof(Airplane)大小的内存,并从1号块开始用next串起来。表尾next为NULL,FreeList头部指针指向1号块地址,并返回0号块作为本次分配结果。
成员operator delete的作用如下所述:
将要释放的对象放回FreeList头部,并将FreeList头部指针指向该对象。(链表前插法!)
原谅??太弱了。。原来还有这么骚的操作,惊了
static allocator
静态形式,代码可复用。思路同上。不过这里没有使用union,而是通过struct将未分配块前四字节当作指针将块串起来。
调用:
原型:
现代的allocator —— global allocator
不在每个类内单独实例化一个allocator了,而是选择全局的实现,下面这个雏形可以应付16种不同的内存块大小。
[ C++ ] 勿在浮沙筑高台 —— 内存管理(9~16p)primitives(下)
标签:静态 思路 对象 一个 operator list 形式 区分 不同的
原文地址:https://www.cnblogs.com/Cha2azzZ/p/12929525.html