如何确定堆栈指针的初始值?

程序加载器初始化/加载textdata+bss区域。 这些都是在开始的虚拟地址空间进程中分配的。 这个堆会随着向更大的地址增长(在data + bss之后)。 堆栈从大到小的地址增长。

我想知道如何确定堆栈指针的初始值。

如果我要求每个进程的虚拟地址限制( ulimit -v ),我会得到

 virtual memory (kbytes, -v) unlimited 

现在,这个unlimited当然是指有限的位数可用于寻址的技术限制(在64位Linux上我记得48位?!)

那么,这是简单的,除非有一个不同的ulimit适用栈指针大致初始化为(开始vmem + 2 ^ 48位)?