当我尝试在C程序中初始化大小为300 * 300 * 4的3D数组时,我的程序停止运行并报告堆栈溢出错误。我使用的系统有3GB RAM,应该足够了。有没有办法增加分配给程序的内存?我在Windows Vista上使用Dev C ++。
答案 0 :(得分:11)
使用malloc()
/ free()
(或new[]
/ delete[]
表示C ++),或全局数组或本地静态数组。如果您尝试在函数中创建非静态数组,它将在堆栈上分配,并且堆栈通常不会很大。
您也可以尝试向后初始化数组;当页面错误发生时,一些操作系统会动态增加堆栈,因为在x86上,堆栈在数字上向下增长,向后初始化可能有所帮助。
答案 1 :(得分:3)
您需要增加程序可以使用的堆栈空间。
您可以在“链接器|系统|堆栈保留大小”下的属性对话框中设置最大堆栈大小
答案 2 :(得分:2)
即使你有3 GB的RAM,堆栈大小也受操作系统的限制,并且通常很小,因为像这样的大型结构很可能在堆上而不是堆栈上分配。
由于您使用的是C ++,maybe you could use Boost?
boost::multi_array<int, 3> x (boost::extents[300][300][4]);
答案 3 :(得分:2)
当您使用DevC ++时,可能您正在使用gcc编译器并通过它使用ld链接器。链接器有一个选项-stack stacksize
,允许您控制分配给堆栈的内存量。你怎么会从DevC ++这样做我不知道。
我也不知道为什么有人会使用DevC ++ - 它是错误的,不再开发。您应该考虑更改为更好的IDE - Code::Blocks刚刚发布了一个新的主要版本,在各个方面都优于DevC ++,并且附带了更加现代的C ++编译器。