参考侯捷内存管理视频
1 内存池:
问题分析:
每次new,底层调用malloc。
每次malloc,会在数据的首尾加上几字节的cookie。
考虑一个对象数组。
比如 一个对象大小12字节。1w个对象的数组。
如果前后cookie的字节数一共8字节。那么cookie的耗费是8w字节
解决办法1:
1 一组内存共用一个cookie
2 未用的内存单元的头四个字节 当作指针。
3 把所有未用的内存单元串成 【可用内存链表】。
4 释放的内存放回【可用内存链表】中
效果:
1 节省大量cookie的内存耗费
2 减少malloc次数
3 内存池分配之后难以回收。
C++实现思路:
1 在类中包含一个静态【allocator类】成员。
2 重载类的new和delete。调用【allocator类】的分配和释放的函数。
3 在类外初始化静态【allocator类】。
4 上述过程可以使用宏定义节约代码量
5 【allocator类】里面存放一个【可用内存链表】头指针。内存的分配和释放都在这个类里实现。