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

时间:2013-03-30 12:17:24

标签: 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可以设置边界吗?

1 个答案:

答案 0 :(得分:5)

  

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

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

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

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

相关问题