Skip to content

memory_allocation

wzs edited this page Aug 27, 2018 · 1 revision

&4 内存分配

4.1概述

程序语言自主管理内存分配的优势

  1. 可以完成类似 预分配, 内存池等 操作, 避开系统调用带来的性能问题.
  2. 更好的配合垃圾回收

内存分配的基础策略

  1. 每次从操作系统申请一大块内存(比如 1MB), 以减少系统调用.
  2. 将申请到的大块内存按照特定大小预先切分成小块, 构成链表.
  3. 为对象分配内存时, 只需从大小合适的链表提取一个小块即可.
  4. 回收对象内存时, 将该小块内存重新归还到原链表, 以便复用.
  5. 如闲置内存过多, 则尝试归还部分内存给操作系统, 降低整体开销.
  6. 注意:
    • 只有系统调用才能真正的开辟内存, 只有系统调用才能真正的回收内存
    • 内存分配器只管理内存块, 并不关心对象状态
    • 内存分配器不会主动回收内存, 由垃圾回收器在完成清理操作后, 触发内存分配器回收操作

go的内存分配器 将管理的内存块分为两种:

  1. span: 由多个 地址连续 的页组成, 大块内存, 面向内部管理.
  2. object: 将span切分成多个特定大小的小块, 每个小块可以存储一个对象. 面向对象分配

Clone this wiki locally