C++学习篇(6)

更多精彩请关注微信公众号“爱折腾的码农”,如果大家感兴趣的,可以多多分享关注微信公众号,二维码见下图。
在这里插入图片描述

       本篇内容主要介绍STL六大组件之一的空间配置器(alloctor),其分为一级空间配置器和二级空间配置器,二级空间配置器主要是为了解决小内存分配时产生的碎片化问题,实现思想是内存池。微信公众号原文链接:https://mp.weixin.qq.com/s/eTULOCRR7AzhANAvYbOKbw

引言

new分配内存主要含有两阶段操作

    1.调用operator new分配内存;

    2.调用类的构造函数构造对象内容;

delete释放内存也含有两阶段操作

    1.调用析构函数将对象析构;

    2.调用operator delete释放内存。

例:class Foo{...};

       //配置内存,然后构造对象

       Foo pf = new Foo;

        //将对象析构,然后释放内存

        dedlete pf;

        为了精密分工,STL allocator决定将两阶段操作区分开来。

        对于具体的实现细节可参考《STL源码剖析》,这里面主要给大家一些概念,相当于总览。接下来重点说一下STL空间配置器中内存分配,这部分在面试中可以作为自己的亮点,比说说超过128byte分配,小于128byte时二级配置器的分配方式,为什么要分成两种配置方式(因为分配小内存会存在内存碎片的问题)。

 

STL内存分配示意图

 

内存分配流程图

第一级空间配置器

代码

 

 

为什么使用malloc而不是new分配内存?

    1、历史原因;

  2、C++并未提供类似于realloc()的内存配置操作,因此,SGI不能直接使用C++的set_new_handler(),必须仿真出一个类似的set_malloc_handler()。

 

 

第二级空间配置器

二级空间配置器的实现原理

 

 

为什么使用union而不是struct?

       1、减轻额外的内存负担,因为使用struct的话,每个节点需要额外的指针指向下一个节点。

        2、实现一物两用,第一个字段中obj可看作一个指针指向相同类型的下一个obj,从第二个字段看,obj看作一个指针指向实际区块。

二级空间配置器分配示例

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值