SGI源码剖析-空间配置器(一文看懂,只讲思想,不讲代码)

本文深入剖析SGI的C++空间配置器,重点介绍两级分配器如何避免内存碎片和重复分配。SGI的allocator采用独立的内存分配和对象构造步骤,对于小内存块,通过内存池管理,使用静态指针数组和链表实现高效分配。当链表为空时,从内存池获取内存,若内存池不足则尝试重新分配。虽然该方案能有效管理内存,但内存池的内存不会真正释放,可能导致长时间占用大量内存。
摘要由CSDN通过智能技术生成

Table of Contents

  1. 基本思想
  2. std::allocator接口
  3. SGI的空间配置器实现概要

基本思想

C++和C最大的区别在于面向对象的引入,因此,相对于C的内存管理,C++多了一个对象构造的过程,因此,标准库使用std::allocator模板类来管理内存,STL的空间配置器allocator明确地将内存分配和对象构造作为两个独立的步骤,内存分配由alloc::allocate()/alloc::deallocate()负责,对象构造由::construct()/::destroy()负责。

std::allocator接口

namespace std
{
    template<typename T>
    class allocator
    {
    public:
        T* allocate(std::size_t n, const void* hint);
        void deallocate(T* p, std::size_t n);
        template<typename T, typename... Args>
        void construct(T* p, Args&&... args
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值