运行时堆栈溢出

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

回答

不。

编译器只能知道在运行时发生了什么非常有限的扩展。例如,它无法判断执行以下函数需要多少堆栈:

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

Stack 是一种有限的资源,如果超过它,就会出现 stackoverflow。


以上是运行时堆栈溢出的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>