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);
的等价函数。