gcc在优化-O3时会消耗所有内存
我尝试编译以下函数,以查看gcc如何使用它: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++) {
#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报告了这一点。