程序加载器初始化/加载text
,data+bss
区域。这些是在进程的开头附近的虚拟地址空间中分配的。然后堆将(在数据+ bss之后)增长到更大的地址。堆栈从大的地址变为较低的地址。
我想知道如何确定堆栈指针的初始值。
如果我要求每个进程的虚拟地址限制(ulimit -v
),我得到
virtual memory (kbytes, -v) unlimited
现在,这个unlimited
当然是指可用于寻址的有限位数的技术限制(在64位Linux上我记得48位?!)
那么,除非使用不同的ulimit
,否则堆栈指针大致初始化为(vmem + 2 ^ 48位的开始),这是否很简单?
答案 0 :(得分:0)
这是一个高度依赖平台的问题,它取决于您正在运行的程序的位数,所使用的操作系统版本,系统配置选项,程序是否为单线程或多线程,以及其他因素: