美文网首页
空间配置器

空间配置器

作者: 寿寿_32206 | 来源:发表于2018-08-12 00:07 被阅读0次

    空间的配置和释放

    1、考虑到小型区块所可能造成的内存破碎问题,SGI 设计了双层级配置器 a:  第一级配置区块超过128kb 用malloc()  free() ,第二级 小于128  采用复杂的memory pool(内存池),又称为次层配置

    第一级配置器   

    template<int inst>

    class _malloc_alloc_templae{...}

    其中:1、 allocate() 直接使用malloc   dealallocate 使用 free()   2、模拟的c++ 的set_new_hander()处理内存不足的状况

    第二级配置器

    template<bool threads, int inst>

    class _default_alloc_template {};

    其中: 1、维护16 个自由链表(free lists),负责16种小型区块的次配置能力。 内存池(memory pool )以malloc() 配置而得,如果内存不足,转调用第一级配置器 。2、如果需求区块大于128 ,就转调用1级 

    注意:

    第一级配置器的allocate() 和realloc() 都是在调用 malloc() 和 realloc() 不成功后改调用oom_malloc() 和 oom_realloc(),后者都有内循环,不断调用 “内存不足的处理例程” ,期望在某次调用后,获取足够得内存,完成任务。如果未被客户端设定,oom_malloc() 和oom_realloc() ,则程序会调用_THROW_BAD_ALLOC 丢出bad_alloc  异常信息,或者利用exit(1)  硬生生得终止程序

    第二配置器 多了一些机制,避免太多得小额区块造成内存碎片,以及配置时候得额外负担(无法避免),区块越小,额外负担所占得比例就越大,显得越浪费

    相关文章

      网友评论

          本文标题:空间配置器

          本文链接:https://www.haomeiwen.com/subject/imlpvftx.html