Go Stack
go 栈 操作系统进程内存 虚拟内存空间大小 Linux为每个进程维护了一个单独的虚拟地址空间。在32位系统上,该虚拟地址空间大小为2^32Bytes = 4G,其中内核空间1G,在高地址处,用户空间3G,在低地址处;在64位系统上,该虚拟地址空间大小为2^48Bytes = 256TB,其中用户和内核各128TB,用户空间0x0000000000000000~0x00007fffffffffff,内核空间0xffff800000000000~0xffffffffffffffff,中间16M TB暂未用到。 linux查看cpu可访问地址空间位数 cat /proc/cpuinfo | grep address address sizes : 43 bits physical, 48 bits virtual 48 bits virtual表示可访问地址空间位数为48,即256TB。 进程的虚拟内存空间分布 高地址+---------> +------------------+-----------+ | | | | 进程相关数据结构 | | | | | +------------------+ v | | | 物理内存 | 内核区 | | +------------------+ ^ | | | | 内核代码和数据 | | | | | +------------------------------+ |XXXXXXXXXXXXXXXXXX| +------------------------------+ | | | | 用户栈 | | | | | %rsp +--------> +--------+---------+ | | | | | +--------v---------+ | | | | |共享区内存映射区域| | | | | +--------^---------+ | | | | | brk +--------> +--------+---------+ v | | | 运行时堆 | 用户区 | | +------------------+ ^ | | | | 未初始化数据 | | | | | +------------------+ | | | | | 已初始化数据 | | | | | +------------------+ | | | | | 代码 | | | | | +------------------+ | |XXXXXXXXXXXXXXXXXX| | 低地址+---------> +------------------------------> 64位代码段总是从地址0x400000开始的。...