当我尝试在C程序中初始化一个大小为300*300*4的3D数组时,我的程序停止运行并报告堆栈溢出错误。我使用的系统有3GB RAM,应该足够。是否有办法增加分配给程序的内存?我在Windows Vista上使用Dev C++。
使用malloc()
/free()
(或C++中的new[]
/ delete[]
)或全局数组或本地静态数组。如果您尝试在函数内创建非静态数组,则会分配堆栈并且堆栈通常不是非常大。
您还可以尝试反向初始化数组;一些操作系统随着页面故障的发生而动态增加堆栈大小,由于在x86上堆栈按数字向下增长,因此反向初始化可以有所帮助。
您需要增加程序可以使用的堆栈空间。
您可以在“链接器 | 系统 | 堆栈保留大小”属性对话框中设置最大堆栈大小。
boost::multi_array<int, 3> x (boost::extents[300][300][4]);
假设您正在使用 DevC++,那么您很可能是使用 gcc 编译器及其链接器 ld。链接器有一个选项 -stack stacksize
,允许您控制分配给堆栈的内存量。如何在 DevC++ 中执行此操作我不知道。
我也不知道为什么有人会使用 DevC++ - 它存在漏洞,而且已经不再开发更新。您应该考虑切换到更好的 IDE - Code::Blocks 刚刚发布了一个新的主要版本,在各个方面都优于 DevC++,并且带有一个更现代的 C++ 编译器。
std::vector<int>(300*300*4)
,或者使用boost::array<boost::array<boost::array<int, 300>, 300>, 4>
等C++解决方案。 - MSalters