【发布时间】:2014-07-20 18:33:36
【问题描述】:
当我运行这样的程序时:
int main()
{
int A[600000];
return 0;
}
运行后出现 Windows 错误“程序已停止工作”,但在以下情况下:
int main()
{
int A[500000];
int B[500000];
return 0;
}
一切似乎都很好。是因为在第一个示例中堆栈溢出了吗?我曾经认为每个函数中的变量都放在同一个堆栈中,但我可能错了。是否有可能在函数中创建太多的对象来处理?什么时候太多?
【问题讨论】:
-
是的,大多数操作系统都对堆栈大小施加了限制。在类 unix 操作系统上,您可以使用
ulimit更改该限制。但是,除非您澄清“它会出现错误”实际上是什么,否则您将得到的只是猜测。 -
请注意,我在 Linux 中运行这两个程序都没有问题。不,它不会通过魔法将 B 放在堆上。
-
“运行后出现错误”什么错误?
-
请考虑更新问题标题以更清楚地表达意思。