golang-内存分配

1、概述

  内存基本策略:

    (1)每次从操作系统申请一大块内存,以减少系统调用。

    (2)将申请的大块内存按照特定大小预先切分成小块、构成链表

    (3)为对象分配内存时,只需从大小适合的链表提取一个小块即可

    (4)回收对象内存时,将小块内存重新归还原链表,以便复用

    (5)如果闲置内存过多,则尝试归还部分内存给操作系统,降低整体开销

  内存块:

    (1)Span:由多个地址连续的页组成的大块内存

    (2)Object:将span按特定大小切分成多个小块,每个小块可储存一个对象。

       span面向内部管理,object面向对象分配,分配器按页数来区分不同大小的span,在获取闲置span时,如果没有找到大小合适的,就返回页数更多的,此时会发生裁剪操作,多余部分将构成新的span放回管理数组,分配器还会将地址相邻的空闲span合并,减少碎片,提供更灵活的分配策略。

  

      

posted @ 2021-03-04 23:56  ConstType  阅读(135)  评论(0)    收藏  举报