我的程序甚至没有使用超过 1 MB 就返回了内存错误。我在 dev-cpp 编译器中编写 C。原程序太大,放在这里。这个非常简单的程序对我有用:
int main(){int a[520076];返回 0;
并返回值 0。然而,这:
int main(){int a[520077];返回 0;
不起作用,原因是内存。我使用 Windows 8,但同样的问题出现在 Windows 7 中。 看起来系统对进程可以使用的内存空间施加了限制。边界也可以由 dev-cpp 设置吗?
最佳答案
Looks like the system puts a maximum memory space
是的,但在本例中这不完全是问题所在。您声明的数组是本地的和自动的,因此它很可能是在堆栈上分配的。堆栈空间是有限的,甚至比动态分配的内存(通常在堆上)更有限,而且它的几兆字节大(如果我没记错的话,它实际上在 Windows 上默认为 1 MB),它很快就会与其他内存发生冲突内存区域。
如果您不想这样做,请将您的变量声明为文件范围(“全局”)变量或static
(阅读副作用)。
此外,您说得对,因为操作系统还限制了所有 内存——它试图在进程之间保持民主。即使您在具有 128 GB RAM 的服务器上运行程序,malloc()
也可能会失败,例如,如果您尝试分配 32 GB 内存。一般来说,不需要那么多的内存,操作系统会保护其他进程免受错误(或故意)占用资源的影响。
关于c - 我的 c 程序打印 "out of memory"-error 但有很多可用的内存空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718424/