c - 我的 c 程序打印 "out of memory"-error 但有很多可用的内存空间

标签 c memory dev-c++

我的程序甚至没有使用超过 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/

相关文章:

java - 用Java在平面文件中记录操作

c - 为什么将函数作为函数的参数传递?

c - C 语言的基本插入排序算法(TDM-GCC 编译器)

c - 段错误/可变大小对象可能未初始化错误 C

c - 如何将文件中的文本放入数组中

c - 为什么 linux 中的 stat64() 随着目录中文件数量的增加而变慢?

c - 存储和打印大于 2^64 的整数值

c - 如何释放从函数返回的指针?

c++ - C中的内存分配过程?是自上而下还是自下而上的方法

c++ - 我如何使用 DEV C++ 构建发布 exe?