这是常见的优化吗?

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 可能,因为这一个活性问题。但我会说“在重要之前不要担心”。

以上是关于这是常见的优化吗?的主要内容,如果未能解决你的问题,请参考以下文章

你真的会写for循环吗?来看看这些常见的for循环优化方式

这是优化 MySQL Query 的正确方法吗?

你真的会写for循环吗?来看看这些常见的for循环优化方式

OI比赛常见优化

优化返回大量记录的查询,避免数百个连接。这是一个聪明的解决方案吗?

PHP优化这是正确的吗?