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

13

我尝试编译以下函数,看看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;
}

发现gcc占用了我的所有内存,把自己逼到了交换分区。
我发现这种情况发生在使用-O3进行优化时,但我没有尝试分析具体的标志。在gcc.godbolt上测试该函数显示这是gcc特定的问题,影响4.8和4.9版本。
这是一个真正的编译器错误吗,还是我的函数有问题?


2
确认在 gcc版本4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) 上。 - Jonathon Reinhart
2
看起来这是一些标志的组合。-O2 -ftree-vectorize 表现出这种行为,但没有 -O2 就不会。 - Jonathon Reinhart
已确认在4.9.2上。 - edmz
2
我已经向gcc bugzilla报告了这个问题。 - EOF
我建议写一篇答案(不需要太长),在其中指出GCC的bugzilla中的错误(给出错误编号或URL)。几天后,您就可以接受它来关闭您的问题。像您展示的这个简单的测试用例一样,拥有一个好的简单测试用例可以让每个人的生活更轻松。 - Jonathan Leffler
显示剩余11条评论
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接