GCC死码消除
GCC 或一般的编译器是否会删除被操作的变量,但根本不影响代码的结果?例如,说 main 只包含
int a = 0;
int b = 0;
for (int i = 0; i < 10; i++) {
a += 10;
b += 10;
}
printf("%d", a);
变量 b 是否曾经存在于内存中,甚至在编译后进行过操作?是否有任何汇编逻辑存储和处理 b?只是不肯定这是否在死代码消除中被计算在内。谢谢。
回答
是的,一点没错。这是一个很常见的优化。
自己回答这些问题的最好方法是学习一点汇编语言并阅读编译器生成的代码。在这种情况下,您可以看到 GCC 不仅b完全不存在优化,而且a, 并且它将整个函数编译为printf("%d", 100);.