如何增加程序的内存分配

5

当我尝试在C程序中初始化一个大小为300*300*4的3D数组时,我的程序停止运行并报告堆栈溢出错误。我使用的系统有3GB RAM,应该足够。是否有办法增加分配给程序的内存?我在Windows Vista上使用Dev C++。

4个回答

11

使用malloc()/free()(或C++中的new[] / delete[])或全局数组或本地静态数组。如果您尝试在函数内创建非静态数组,则会分配堆栈并且堆栈通常不是非常大。

您还可以尝试反向初始化数组;一些操作系统随着页面故障的发生而动态增加堆栈大小,由于在x86上堆栈按数字向下增长,因此反向初始化可以有所帮助。


1
或者使用std::vector<int>(300*300*4),或者使用boost::array<boost::array<boost::array<int, 300>, 300>, 4>等C++解决方案。 - MSalters

3

您需要增加程序可以使用的堆栈空间。

您可以在“链接器 | 系统 | 堆栈保留大小”属性对话框中设置最大堆栈大小。


2
即使您拥有3 GB的RAM,堆栈大小仍由操作系统限制,通常很小,因为像这样的大型结构很可能是在堆上分配的,而不是在堆栈上。
由于您正在使用C ++,也许您可以使用Boost?请参考此处
boost::multi_array<int, 3> x (boost::extents[300][300][4]);

2

假设您正在使用 DevC++,那么您很可能是使用 gcc 编译器及其链接器 ld。链接器有一个选项 -stack stacksize,允许您控制分配给堆栈的内存量。如何在 DevC++ 中执行此操作我不知道。

我也不知道为什么有人会使用 DevC++ - 它存在漏洞,而且已经不再开发更新。您应该考虑切换到更好的 IDE - Code::Blocks 刚刚发布了一个新的主要版本,在各个方面都优于 DevC++,并且带有一个更现代的 C++ 编译器。


1
完全同意你的第二段。(不过,出于类似的原因,我不知道为什么还有人在使用Windows Vista ;) ) - Artelius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接