4

我的程序在不使用超过 1 MB 的情况下返回内存错误。我在 dev-cpp 编译器中编写 C。原程序太大,放在这里。这个非常简单的程序对我有用:

int main(){int a[520076]; return 0;}

并返回值 0。但是,这个:

int main(){int a[520077]; return 0;}

不起作用,原因是内存。我使用的是 Windows 8,但同样的问题出现在 Windows 7 中。看起来系统对进程可以使用的内存空间进行了限制。dev-cpp也可以设置边界吗?

4

1 回答 1

5

看起来系统放了一个最大的内存空间

是的,但这并不完全是这种情况下的问题。您声明的数组是本地和自动的,因此它很可能分配在堆栈上。堆栈空间是有限的,甚至比动态分配的内存(通常在堆上)更有限,而且它的大小只有几兆字节(如果我没记错的话,在 Windows 上它实际上是 1 MB),它很快就会与其他内存发生冲突内存区域。

如果您不想要这个,请将您的变量声明为文件范围(“全局”)变量或static(阅读副作用)。

此外,您说得对,操作系统还限制了所有内存——它试图保持进程之间的民主。即使您在具有 128 GB RAM 的服务器上运行程序,malloc()也可能会失败,例如,如果您尝试分配 32 GB。通常不需要那么多内存,并且操作系统可以保护其他进程免受错误(或故意)占用资源的影响。

于 2013-03-30T12:20:47.347 回答