空间管理
普通存放数据的原理
需要空间–>new/new[]–>申请空间、构造对象
new是将malloc重新封装的,使用一次malloc,在内存中除了会开辟所需空间外,还会额外开辟36个字节
结构如下图:
通过这种形式管理空间可以防止越界访问
普通方式存放数据的缺陷
1.频繁的向系统索要小的内存块,会产生内存碎片
2.频繁的向系统索要小的内存块,产生额外开销,效率低
3.没有及时的释放空间,造成内存泄漏
4.空间不足时,无法获取空间
标准空间配置器
标准空间配置器只是将new,delete进行简单的封装,与我们平常使用的new和delete没太大区别
重新设计空间配置器
重新设计空间配置器有一级空间配置器和二级空间配置器两种
重新设计空间配置器会根据用户索要空间的大小来选择空间配置器
一级空间配置器
当用户索要空间大于128个字节时,会使用一级空间配置器
一级空间配置器将malloc和free进行简单的封装
二级空间配置器
当用户索取空间小于128个字节时,会使用二级空间配置器
为了减少多次开辟空间造成的额外消耗,二级空间配置器会开辟一个很大空间作为内存池
同时会构造一个哈希表,其中会有128/8=16个结点,每个结点下面会挂(n+1)*8字节的内存块,构成哈希桶,以此来管理小的内存块
结构如下:
空间管理如下:
这种处理内存碎片的方式虽然解决了外部存在大量的内存碎片的问题,但是还是会有在哈希桶上挂的小碎片