我意识到我从来没有真正想过这个。
如果我创建了一个足够大的递归调用链,那么堆栈最终会不会增长得足够小,以至于它会与其他东西重叠,比如共享库(在 Linux 上加载在它的正下方)等......
是的,当然,当没有足够的空间容纳更多堆栈空间时,这就是我们所说的堆栈溢出。
但是如果它向上生长,情况会发生什么变化?
嗯,要问的第一个问题是:从地址空间中的哪里向上增长?无法选择堆栈向上增长的最佳起点,因为太高意味着堆栈空间不足,而太低则意味着堆空间不足。
对于较小的地址空间来说,这些都是严重的问题,但是对于 64 位地址空间和虚拟内存,有如此多的空闲空间,我们可以毫无问题地容纳许多向下增长的堆栈(即许多线程)。