vector.resize()中的分配错误

时间:2018-11-03 19:47:55

标签: c++ visual-studio allocation bad-alloc

我在Visual Studio 2017(社区版本)中尝试了以下C ++代码:

vector <int> V;
V.resize(600000000);
for (int i = 0;i < 600000000;i++)
{
    if (i % 10000000 == 0)cout << i << endl;
}

但得到:

例外:内存位置处的std :: bad_alloc

我更改了(项目的)“属性”中的“堆保留大小”,“堆提交大小”,“堆保留大小”和“堆提交大小”-> Linker-> System的大小:1000000000。此外,我还更改了“所有驱动器的总分页文件大小”到控制面板中的100GB RAM(我的虚拟机具有120GB RAM)。它没有用。

那么有什么方法可以将超过600000000个整数放入向量中吗?

1 个答案:

答案 0 :(得分:0)

确保要编译的是64位二进制文​​件,而不是32位。

600.000.000整数是2.400.000.000字节(〜2gb),对于默认情况下,对于32位二进制数来说太大了。

如果在32位二进制文​​件中需要超过2gb,则可以使用Visual Studio中的/LARGEADDRESSAWARE标志进行链接

编辑:如Deduplicator所述,该标志可能无法使此示例在32位上工作。最好的解决方案是构建64位二进制文​​件。