如何增加程序的内存分配

时间:2010-06-12 06:53:45

标签: c++ c

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

4 个答案:

答案 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 ++编译器。