首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解编译器的主要优化

无法理解编译器的主要优化
EN

Stack Overflow用户
提问于 2009-06-26 15:59:41
回答 4查看 362关注 0票数 1

代码的马提努斯举了一个很好的例子,编译器通过计算出乘法来优化运行时的代码:

Martinus代码

代码语言:javascript
复制
int x = 0;
for (int i = 0; i < 100 * 1000 * 1000 * 1000; ++i) {
    x += x + x + x + x + x;
}
System.out.println(x);

在编译时(感谢Abelenky指出这一点)对常数折叠编译器进行优化后的代码

代码语言:javascript
复制
int x = 0;
for (int i = 0; i < 100000000000; ++i) {
    x += x + x + x + x + x;
}
System.out.println(x);

在我看来,这种优化技术似乎微不足道。我想这可能是Sun最近开始使用的技术之一。

我对感兴趣,编译器进行了两种类型的优化

  1. 优化,而这些优化在今天的编译器中被忽略了,比如在运行时Java的编译器中。
  2. 今天大多数编译器使用的优化

请把每一种优化技术放在一个单独的答案上。

哪种技术在90年代(1)和今天(2)使用编译器?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-26 19:06:14

编译器书籍应该提供相当好的资源。

如果这是显而易见的,请忽略它,但是您是在询问低级别的优化,这是编译器唯一能够做到的。在非玩具程序中,高级优化的效率要高得多,但只有程序员才能做到。

票数 0
EN

Stack Overflow用户

发布于 2009-06-26 16:24:34

就买最新版的“龙书”吧。

票数 4
EN

Stack Overflow用户

发布于 2009-06-26 16:16:12

示例中显示的折叠100*1000*1000*1000 => 100000000000的优化不是运行时优化。它发生在编译时。(我甚至不会称它为优化)

我不知道在运行时会发生任何优化,除非计算具有JIT (准时)编译的VM引擎。

在编译时发生的优化范围很广,而且常常不容易解释。但它们可以包括内联小功能、重新排列缓存局部性指令、重新排列指令以获得更好的流水线或超线程处理,以及许多其他技术。

编辑:一些F*ER编辑了我的文章.然后投了反对票。我最初的文章清楚地指出,折叠乘法发生在编译时,而不是如海报所建议的运行时。然后我提到,我并不认为折叠常量是一种很好的优化。前处理器甚至会这么做。

马西:如果你想回答这个问题,那就回答这个问题。不要把别人的答案编辑成他们从未写过的文字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1049927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档