空间管理

空间管理

普通存放数据的原理

需要空间–>new/new[]–>申请空间、构造对象

new是将malloc重新封装的,使用一次malloc,在内存中除了会开辟所需空间外,还会额外开辟36个字节

结构如下图:


undefined

通过这种形式管理空间可以防止越界访问

普通方式存放数据的缺陷

1.频繁的向系统索要小的内存块,会产生内存碎片

2.频繁的向系统索要小的内存块,产生额外开销,效率低

3.没有及时的释放空间,造成内存泄漏

4.空间不足时,无法获取空间

标准空间配置器

标准空间配置器只是将new,delete进行简单的封装,与我们平常使用的new和delete没太大区别

重新设计空间配置器

重新设计空间配置器有一级空间配置器和二级空间配置器两种

重新设计空间配置器会根据用户索要空间的大小来选择空间配置器

一级空间配置器

当用户索要空间大于128个字节时,会使用一级空间配置器

一级空间配置器将malloc和free进行简单的封装

 

二级空间配置器

当用户索取空间小于128个字节时,会使用二级空间配置器

为了减少多次开辟空间造成的额外消耗,二级空间配置器会开辟一个很大空间作为内存池

同时会构造一个哈希表,其中会有128/8=16个结点,每个结点下面会挂(n+1)*8字节的内存块,构成哈希桶,以此来管理小的内存块

结构如下:


undefined

空间管理如下:

 

这种处理内存碎片的方式虽然解决了外部存在大量的内存碎片的问题,但是还是会有在哈希桶上挂的小碎片

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值