如果我有这样的代码:
{
int x = f();
if (g(x)) return;
int y = h();
// use y
}
编译器是否可能意识到在if
语句之后没有使用x,并且它可以将变量y
放在x
占用的寄存器中?我知道所有编译器都不同,但问题是这是否是我可以合理依赖的常见优化。我很想知道,因为我想让优化器忽略额外的寄存器,而不是想出this_variable_holds_x_then_y
这样的名字。
是否有助于在x
周围添加额外的范围,以便编译器可以看到它无法从外部访问?
答案 0 :(得分:2)
是的 - 这是任何现代编译器都会做的非常简单的优化。您也可以自己轻松检查 - 大多数编译器都支持" -S"或其他产生汇编语言输出的命令行选项(或者您可以反汇编机器代码)。