【发布时间】:2021-05-28 00:28:35
【问题描述】:
如果编译器在运行前计算出所需的堆栈大小,那么堆栈溢出是如何发生的呢? 编译时编译器是否计算整个程序的堆栈所需的内存总量?
【问题讨论】:
-
编译器计算过程中可能会出现栈溢出。我认为典型的编译器不会进行计算。
-
那么,你有多少堆栈内存?这可能会有所不同。此外,编译器知道每个堆栈帧的大小,但不知道您可能有多少帧。考虑一种递归算法,或在堆栈上动态分配的内存。
-
一台计算机只有这么多的“堆栈空间”。如果由于某种原因(无限递归、写出数组边界、其他未定义行为)在程序中使用了更多,那么您会得到堆栈溢出
-
“如果我的假设是正确的,为什么事实与我的假设相矛盾?”这个问题的答案通常是假设是不正确的。
标签: c++