c++ - 运行时堆栈溢出
问题描述
如果编译器在运行前计算出所需的堆栈大小,那么堆栈溢出是如何发生的呢?在编译时,编译器是否计算整个程序堆栈所需的内存总量?
解决方案
不。
编译器只能在非常有限的范围内知道运行时发生的事情。例如,它无法判断执行以下函数需要多少堆栈:
void foo() {
int x = 0;
std::cin >> x;
if (x == 42) foo();
}
堆栈是一种有限的资源,如果超过它,你会得到一个堆栈溢出。
推荐阅读
- c - 为什么 nm 为 C 编写并嵌入 golang 对象的库中的变量符号报告错误的偏移值太大?
- r - 如何有效地从 R 中的 PDF 中提取表格数据?
- ios - XCode 项目构建失败:x 架构 x86_64 clang 的重复符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- android - 调用 onPause 时,Android 服务会在 1 分钟后停止
- android - Android中两个模块之间的导航
- r - 如何将男性和女性的人口加在一起以删除人口统计表中的性别作为变量。在 R 工作室中
- html - Pwa beforeInstallPrompt 不在移动浏览器中触发,但在普通桌面浏览器中工作
- multithreading - 我需要帮助将多线程应用于 groovy 类
- python - 有没有办法将 numpy 数组转换为数据框,然后再转换回 numpy 数组并仍保持原始形状?
- django - 使用 Rest Post 请求将图像上传到 S3 存储桶的 Django 错误