我尝试编译以下函数以查看 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 版本。
这是一个真正的编译器错误,还是我的功能坏了?