内存管理相关笔记

探讨内存池技术解决频繁new/delete导致的内存碎片及效率问题。通过一组内存共用cookie,利用未用内存单元构建可用内存链表,显著减少malloc调用,节省大量内存。C++中可通过重载new/delete并使用静态allocator类实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考侯捷内存管理视频

 

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类】里面存放一个【可用内存链表】头指针。内存的分配和释放都在这个类里实现。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值