为什么在编译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的内存。
对于任何
答案 0 :(得分:-2)
这绝对是个错误。我可以在我的系统上使用5.3重现这一点。 RAM使用率迅速增加,但我关闭了该程序,因为我不希望我的系统崩溃。另一方面,如果我在Clang 3.8中编译它,它几乎立即编译。
我建议将此报告给gcc.gnu.org/bugzilla。正如indicated here看一下错误报告59659,68203和56671.我很确定他们都指出了GCC无法拥有大量非平凡类的同样问题。类型。