1

我试图创建一个数组: int HR[32487834]; 这不只占用大约 128 - 130 兆字节的内存吗?我正在使用 MS c++ Visual Studios 2005 SP1,它崩溃并告诉我堆栈溢出。

4

3 回答 3

11

使用向量 - 数组数据将位于堆上,而当您离开函数或块时,您仍然会自动清理数组:

std::vector<int> HR( 32487834);
于 2009-08-01T19:03:03.050 回答
7

虽然您的计算机可能有千兆字节的内存,但堆栈没有(默认情况下,我认为它在 Windows 上约为 1 MB,但您可以将其更大)。

尝试在堆上分配它new []

于 2009-08-01T18:41:09.740 回答
3

默认情况下,堆栈不是那么大。您可以使用/F 编译器开关设置堆栈大小。

如果没有此选项,堆栈大小默认为 1 MB。number 参数可以是十进制或 C 语言表示法。该参数的范围可以从 1 到链接器接受的最大堆栈大小。链接器将指定的值向上舍入到最接近的 4 个字节。/F 和数字之间的空格是可选的。

您还可以对可执行文件使用/STACK 链接器选项

但很可能你应该把你的问题分成几个部分,而不是一次做所有事情。你真的需要一次所有的记忆吗?

您通常可以在堆上分配比在堆栈上更多的内存。

于 2009-08-01T18:44:54.740 回答