首页 > 解决方案 > 运行时堆栈溢出

问题描述

如果编译器在运行前计算出所需的堆栈大小,那么堆栈溢出是如何发生的呢?在编译时,编译器是否计算整个程序堆栈所需的内存总量?

标签: c++

解决方案


不。

编译器只能在非常有限的范围内知道运行时发生的事情。例如,它无法判断执行以下函数需要多少堆栈:

void foo() {
    int x = 0;
    std::cin >> x;
    if (x == 42) foo();
}

堆栈是一种有限的资源,如果超过它,你会得到一个堆栈溢出。


推荐阅读