使用大型Object数组的极端内存使用情况

时间:2016-06-03 00:12:38

标签: c++ object compilation ram large-data

为什么在编译Sample 1时,它会使用我的所有内存并崩溃我的计算机,而Sample 2会立即编译而不会这样做?

样本1:

class Foo
{
    int a = 0;
};

class Test
{
    Foo foo[4000000] = {};
};

int main()
{
    Test t;
}

样本2:

class Foo
{
    int a = 0;
};

int main()
{
    Foo foo[4000000] = {};
}

最后,有没有办法在编译时阻止Sample 1使用大量的RAM?我正在使用gcc version 5.3.0,我使用-std=c++11编译了上述内容。请注意,class Test应该只需要16 MB的内存。

对于任何

1 个答案:

答案 0 :(得分:-2)

这绝对是个错误。我可以在我的系统上使用5.3重现这一点。 RAM使用率迅速增加,但我关闭了该程序,因为我不希望我的系统崩溃。另一方面,如果我在Clang 3.8中编译它,它几乎立即编译。

我建议将此报告给gcc.gnu.org/bugzilla。正如indicated here看一下错误报告59659,68203和56671.我很确定他们都指出了GCC无法拥有大量非平凡类的同样问题。类型。