我尝试编译以下函数来查看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版本的影响
这是一个真正的编译器错误,还是我的功能坏了?
答案 0 :(得分:3)
该错误发生在gcc bugzilla上,https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65518。已经确认&amp;显然固定在行李箱里。这里希望修复程序最终会流向我的发行版。谢谢大家!