学习STL过程中的一些零散记录2

sgi stl 双层级配置器:

一级配置器:1、直接使用malloc()、ralloc()和free();

                         2、因为并非使用::operator new 来配置内存,实现了类似c++ new handler的机制(__malloc_alloc_oom_handler、set_malloc_handler);

                         3、至于为什么不使用new,侯捷的stl源码剖析提到的两个猜想,一是历史原因,二是c++没用提供realloc()的操作;

二级配置器:1、分两组情况,当配置快块大于128bytes,调用一级配置器,当配置块小于128bytes时候采用内存池的整理方式,避免小区块造成内存碎片 ;

                         2、 free_lists节点结构:

                                 union obj{

                                  union obj* free_list_link;

char client_date[1];         

                                 }      

                                union的特性确保了不会为了维护链表所必须的指针而造成内存浪费;    

第一个字段指向相同类型的obj,第二个字段指向实际区块;

                          3、位运算,好吧,我不太会用,sgi二级配置器会将小区块的内存需求量上调到8的倍数,实现是这样的:return( ((bytes)+__ALIGN-1) & ~(__ALIGN-1) );                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值