我在做一些非常大的数组处理。我做的一个全球性的声明:LINK:致命错误LNK1248:图像大小超过最大允许大小(80000000)
`float array[200][1600][811];`
当我建立我在微软的Visual Studio 2010的解决方案,我收到以下错误
LINK : fatal error LNK1248: image size (F85C8000) exceeds maximum allowable size (80000000)
现在,我知道这相当于约1 GB的程序存储器。但是这个声明适用于float [50][1600][811]
的声明,这相当于250MB。我知道默认的堆栈大小非常有限。 有几件事我已经尝试过了。我通过属性 - >链接器 - >堆栈保留大小增加了VS中的堆栈大小。这没有帮助。我改变了我的可执行文件在x64模式下运行(据说这可以解决高达2GB的内存!)。这也没有帮助。
我不想在数组上做malloc
,因为我知道我确实需要他们在我的代码中。我不得不让它们成为全局声明,以便我可以利用堆栈/堆内存。如果我在Main()
之内声明它们,它会给我内存溢出的错误。
任何指针将不胜感激。 谢谢。
你不应该(也不能)把它放在堆栈上。别尝试。出于所有实际目的,堆分配对于这种大小的东西是不可避免的。 – Mysticial
现在是时候了解堆内存分配的全部内容。或者,这里有'x64'平台让你感觉舒服一段时间。 –
首先要问的是,你是否需要首先使用数组。如果大多数值仍然设置为默认值,或者您可以按照不需要同时存储在内存中的顺序处理它们,则不会发生这种情况。 – reinierpost