内存分区
零 前置知识
操作系统的每个进程都认为自己可以访问计算机的所有物理内存,但由于计算机必定运行着多个程序,每个进程都不能拥有全部内存。
为了避免了进程直接访问实际的物理地址,操作系统会将物理内存虚拟为一个数组,每个元素都有一个唯一的物理地址(PA)。 物理存储其器中存储着一个页表(page table),该表即虚拟地址与物理地址的映射表,读取该也表,即可完成地址翻译。
假设一个程序访问地址为0x1001的内存,实际上,该数据并不一定是存储在0x1001的物理地址中,甚至也不在物理内存中(如果物理内存满了,则可以转移到磁盘上)。这些地址不必反映真实的物理地址,可以称为“虚拟内存”。
一 内存分区
1.0 程序的内存使用
现在使用命令来查看Go程序的内存使用:
go build main.go
size main
此时会显示Go程序在未启动时,内存的使用情况:
![] (runtime-01.png)
此时可执行程序内部已经分好了三段信息,分别为:
- text 代码区
- data 数据区
- bss 未初始化数据区