gcc在优化-O3时会消耗所有内存

gcc在优化-O3时会消耗所有内存,c,gcc,internal-compiler-error,C,Gcc,Internal Compiler Error,我尝试编译以下函数,以查看gcc如何使用它: #include <stdint.h> #include <stddef.h> typedef struct giga { uint64_t g[0x10000000]; } giga; uint64_t addfst(giga const *gptr, size_t num) { uint64_t retval = 0; for (size_t i = 0; i < num; i++) {

我尝试编译以下函数,以查看gcc如何使用它:

#include <stdint.h>
#include <stddef.h>

typedef struct giga
{
  uint64_t g[0x10000000];
} giga;

uint64_t addfst(giga const *gptr, size_t num)
{
  uint64_t retval = 0;
  for (size_t i = 0; i < num; i++)
    {
      retval += gptr[i].g[0];
    }
  return retval;
}
#包括
#包括
typedef结构千兆
{
uint64_t g[0x10000000];
}千兆;
uint64添加FST(千兆常数*gptr,大小\u t数量)
{
uint64_t retval=0;
对于(大小i=0;i
发现gcc耗尽了我的记忆,把自己换成了死亡。
我在
-O3
进行优化时发现了这种情况,但我没有尝试剖析具体的负责标志。在gcc.godbolt上测试该功能表明这是特定于gcc的,但会影响4.8和4.9版本。

这是一个真正的编译器错误,还是我的函数被破坏了?

该错误在gcc bugzilla上。它已被确认&显然已固定在行李箱中。这里希望修复最终会渗透到我的发行版中。谢谢大家

gcc版本4.8.2 20140120(Red Hat 4.8.2-16)(gcc)
上确认。看起来它是一些标志的组合
-O2-ftree vectorize
展示了behvior,但没有
-O2
@JonathonReinhart:看来你已经掌握了
-ftree vectorize
,但是在我的机器上
GCC:(Ubuntu 4.8.2-19ubuntu1)4.8.2
它也在
-O1-ftree矢量化上冻结
。在
4.9.2
上确认。我向gcc bugzilla报告了这一点。