Go虚拟内存布局 #
Go 的虚拟内存布局了。Go 整体的虚拟内存布局是存放在 mheap 中的一个 heapArena 的二维数组。定义如下:
arenas [1 << arenaL1Bits]*[1 << arenaL2Bits]*heapArena
这里二维数组的大小在不同架构跟操作系统上有所不同,对于 x86-64 架构下的
Linux 系统,第一维数组长度是 1,而第二维数组长度是 4194304。这样每个
heapArena 管理的内存大小是 64MB,由此可以算出 Go 的整个堆空间最多可以管理 256TB 的大小。

Go 通过 heapArena 来对虚拟内存进行管理的方式其实跟操作系统通过页表来管理物理内存是一样的。
Viewpoint #
From #
24 | GC实例:Python和Go的内存管理机制是怎样的?