如果堆栈向下增长,它如何不与地址空间中的其他内容重叠?

问题描述 投票:0回答:1

我意识到我从来没有真正想过这个。

如果我创建了一个足够大的递归调用链,那么堆栈最终会不会增长得足够小,以至于它会与其他东西重叠,比如共享库(在 Linux 上加载在它的正下方)等......

assembly architecture stack
1个回答
0
投票

是的,当然,当没有足够的空间容纳更多堆栈空间时,这就是我们所说的堆栈溢出。


但是如果它向上生长,情况会发生什么变化?

嗯,要问的第一个问题是:从地址空间中的哪里向上增长?无法选择堆栈向上增长的最佳起点,因为太高意味着堆栈空间不足,而太低则意味着堆空间不足。


对于较小的地址空间来说,这些都是严重的问题,但是对于 64 位地址空间和虚拟内存,有如此多的空闲空间,我们可以毫无问题地容纳许多向下增长的堆栈(即许多线程)。

© www.soinside.com 2019 - 2024. All rights reserved.