前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go源码剖析2 内存分配2 初始化

go源码剖析2 内存分配2 初始化

原创
作者头像
历久尝新
修改2020-05-19 17:47:36
4060
修改2020-05-19 17:47:36
举报
文章被收录于专栏:学而时习之学而时习之

初始化时的虚拟地址空间:

因为内存分期和垃圾回收算法都依赖要连续的地址, 所以在初始化阶段, 预先保留了很大的一段虚拟地址空间.

保留地址空间, 并不会分配内存.

三个区域:

上述的虚拟的地址空间被划分成了三个区域:

页所属span指针数组

GC标记位图

用户内存分配区域

spans 512M

bitmap 32GB

arena 512GB

简单的说, 就是用三个数组组成了一个高性能内存管理结构

  1. 使用arena地址向操作系统申请内存, 其大小决定了可分配用户内存的上限.
  2. 位图bitmap 为每个对象提供4bit标记位, 用于保存指针, GC标记等信息.
  3. 创建span的时候, 按页填充对应spans空间. 在回收object时, 只需将其地址按页对齐后就可以找到所属的span, 分配器还用此访相邻的span, 做合并操作

该章节未完成.有部分还没搞懂, 学习后再补充.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化时的虚拟地址空间:
  • 三个区域:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档