MyTinySTL--空间配置器

一、 空间配置器

用alloc文件,用于分配和回收内存,以内存池的方式实现。

采用链表的方式管理内存碎片,分配与回收小内存(<=4K)区块。我们用联合体union来维护链表,从其第一个字段观之可以视为一个指针,指向下一个区块;从其第二个字段观之是存有本块内存首地址。且联合体的大小是其中最长对象的大小,因此使用联合体就解决了为维护链表而造成的内存浪费。
// 共用体: FreeList
// 采用链表的方式管理内存碎片,分配与回收小内存(<=4K)区块
union FreeList {
union FreeList* next; // 指向下一个区块
char data[1]; // 储存本块内存的首地址
};

本空间配置器也采用二级配置器:

(1) 如果内存较大超过4096 bytes,直接调用 std::malloc, std::free
(2) 当内存较小时,以内存池进行管理,每次配置一大块内存,并维护对应的自由链表。

源码:

包括了 allocator 和 constructor,分别定义在 allocator.h 和 construct.h 中。
allocator 负责空间的配置与回收,定义了一个类 mystl::alloc 用于管理内存,定义在 alloc.h 。
constructor 负责对象的构造与析构,对应两个全局函数: construct 和 destroy。
源码资源

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一个code杠精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值