我的c程序打印"内存不足" - 错误,但有很多可用的内存空间

Joh*_*Sig 4 c memory dev-c++

我的程序返回内存错误,而不使用超过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还可以建立边界吗?

小智 5

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

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

如果您不想这样做,请将您的变量声明为文件范围("全局")变量或static(读取副作用).

此外,你是正确的,因为操作系统也限制了所有的内存 - 它试图维持进程之间的民主.即使您在具有128千兆字节RAM的服务器上运行程序,malloc()也可能会失败,例如,如果您尝试分配32千兆字节.通常不需要那么多内存,操作系统会保护其他进程免于错误地(或有意地)占用资源.