GCC 死代码消除

GCC deadcode elimination

GCC 或一般的编译器是否会删除对其进行操作但根本不影响代码结果的变量?例如,假设 main 仅包含

int a = 0;
int b = 0;
for (int i = 0; i < 10; i++) {
     a += 10;
     b += 10;
}
printf("%d", a);

变量b是否曾经存在于内存中,甚至在编译后被操作过?是否有任何汇编逻辑存储和处理 b?只是不确定这是否计入死代码消除。谢谢

是的,绝对是。这是一个很常见的优化。

自己回答此类问题的最佳方法是学习一点汇编语言并阅读 the code generated by the compiler。在这种情况下,您可以看到 GCC 不仅优化 b 完全不存在,而且优化 a,并将整个函数编译为 printf("%d", 100);.[= 的等价物14=]