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

Mat*_*eld 5 c++ ram compilation object large-data

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

样本1:

class Foo
{
    int a = 0;
};

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

int main()
{
    Test t;
}
Run Code Online (Sandbox Code Playgroud)

样本2:

class Foo
{
    int a = 0;
};

int main()
{
    Foo foo[4000000] = {};
}
Run Code Online (Sandbox Code Playgroud)

最后,有没有办法在编译时阻止样本1使用大量的RAM?我正在使用gcc version 5.3.0和我编译上面的-std=c++11.请注意,class Test只需要16 MB的内存.

任何

小智 -2

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

我建议将此问题报告给 gcc.gnu.org/bugzilla。正如此处所示,请查看错误报告 59659、68203 和 56671。我很确定它们都指向 GCC 无法拥有大量非平凡类类型的同一问题。