这是常见的优化吗?
Posted
技术标签:
【中文标题】这是常见的优化吗?【英文标题】:Is this a common optimization? 【发布时间】:2015-04-10 14:28:31 【问题描述】:如果我有这样的代码:
int x = f();
if (g(x)) return;
int y = h();
// use y
编译器是否会意识到在if
语句之后没有使用x,并且它可以将变量y
放入x
占用的寄存器中?我知道所有编译器都是不同的,但问题是这是否是我可以合理依赖的常见优化。我想知道是因为我想让优化器省略额外的寄存器,而不是想出像this_variable_holds_x_then_y
这样的名字。
在x
周围添加一个额外的范围是否有帮助,以便编译器可以看到它无法从外部访问?
【问题讨论】:
编写清晰易读的代码并相信编译器会做正确的事情,除非分析证明并非如此。 这很常见,如果你学习 CS,你可能会在大学的编译器课程中实现它。 在 x 周围添加一个额外的范围是否有帮助,以便编译器可以从外部看到它是不可访问的? 如果 X 是一个对象,并且您需要将它“销毁”在使用构造的 Y 对象之前,肯定是 YES。 【参考方案1】:是的 - 这是任何现代编译器都会做的非常简单的优化。您也可以自己轻松检查 - 大多数编译器都支持“-S”或其他产生汇编语言输出的命令行选项(或者您可以反汇编机器代码)。
【讨论】:
这会在活性分析中出现吗? @CppMan 可能,因为这是一个活性问题。但我会说“在重要之前不要担心”。以上是关于这是常见的优化吗?的主要内容,如果未能解决你的问题,请参考以下文章