这是一个常见的优化吗?

时间:2015-04-10 14:28:32

标签: c++ optimization

如果我有这样的代码:

{
   int x = f();

   if (g(x)) return;

   int y = h();

   // use y
}

编译器是否可能意识到在if语句之后没有使用x,并且它可以将变量y放在x占用的寄存器中?我知道所有编译器都不同,但问题是这是否是我可以合理依赖的常见优化。我很想知道,因为我想让优化器忽略额外的寄存器,而不是想出this_variable_holds_x_then_y这样的名字。

是否有助于在x周围添加额外的范围,以便编译器可以看到它无法从外部访问?

1 个答案:

答案 0 :(得分:2)

是的 - 这是任何现代编译器都会做的非常简单的优化。您也可以自己轻松检查 - 大多数编译器都支持" -S"或其他产生汇编语言输出的命令行选项(或者您可以反汇编机器代码)。