程序加载器初始化/加载text
,data+bss
区域。这些分配在靠近开始的进程的虚拟地址空间中。然后堆会向更大的地址增长(在 data+bss 之后)。堆栈从较大的地址向较低的地址增长。
我想知道堆栈指针的初始值是如何确定的。
如果我要求每个进程的虚拟地址限制(ulimit -v
)我得到
virtual memory (kbytes, -v) unlimited
现在,这unlimited
当然是指有限数量的可用于寻址的技术限制(在 64 位 Linux 上,我记得 48 位?!)
那么,除非应用不同ulimit
的应用程序,否则堆栈指针被粗略地初始化为(vmem + 2 ^ 48 位的开始)就这么简单吗?