我读到 spoj 问题的内存限制是 256 MB。我在这里以 spoj 为例。我想要一个更普遍的答案。假设,我在C++中动态分配了一个5000万个整数的数组,这将占用大约200 MB的堆空间。那么这是否意味着我最多可以在调用栈上分配56 MB的数据?假设我通过堆分配消耗了所有可用的内存。这是否意味着现在我甚至不能在堆栈上声明一个整数变量,即使我还没有将堆栈用于任何其他用途。是这样的吗,还是说栈和堆都有单独的内存限制并独立运行?
在linuxx86-32中,默认的堆栈限制是2 MB。所有现代操作系统都有类似的限制。
一般来说,你不应该在堆栈上创建大对象。除了本地变量,堆栈还用于函数的堆栈框架。每一个活动的函数调用都会占用一些堆栈上的内存。
AFAIK在竞争平台上,内存限制是针对程序本身的。