【发布时间】:2021-07-08 17:58:49
【问题描述】:
我记得说过堆栈内存地址是如何增长的,而堆是如何增长的,但它们占用了相同的内存条。如果是这样,为什么一些大型数据结构会导致堆栈溢出,但在堆上却完全没问题?
【问题讨论】:
-
stck 传统上是有限的,而堆可以利用整个内存。
-
@Devolus,这与传统上堆栈内存地址增长和堆增长的 OP(正确)观察相矛盾。所以他们可以在两者之间的任何地方见面。
-
@PaulOgilvie,为什么会有矛盾?当您用完堆栈空间时会发生堆栈溢出,但是这是确定的。它与可用内存无关,因为这取决于架构。
-
有限的堆栈大小是操作系统的功能,而不是语言或底层硬件(通常)。这样做的动机是确保没有一个进程在出现恶意(例如通过编写糟糕的递归调用)并威胁到整个系统的稳定性时获取所有可用内存。当然,如果你在堆上发疯,同样的事情也会发生,
标签: c stack malloc stack-overflow heap-memory