今天我和我的一个 friend 讨论了几个小时关于“编译器优化”的问题。
我为 的观点辩护。有时 ,编译器优化可能会引入错误,或者至少会引入不希望的行为。
我的 friend 完全不同意,说“编译器是由聪明人构建的,做聪明的事情”,因此可以从不出错。
他根本没有说服我,但我不得不承认我缺乏现实生活中的例子来加强我的观点。
谁在这里?如果我是,您是否有任何现实生活中的示例,其中编译器优化会在生成的软件中产生错误?如果我弄错了,我应该停止编程并学习钓鱼吗?
最佳答案
编译器(和运行时)优化当然会引入不希望的行为 - 但至少只有在您依赖未指定的行为(或确实对明确指定的行为做出错误假设)时才会发生这种情况。
现在除此之外,当然编译器中可能存在错误。其中一些可能与优化有关,其影响可能非常微妙 - 事实上它们很可能是,因为明显的错误更有可能被修复。
假设您将 JIT 作为编译器包括在内,我已经在 .NET JIT 和 Hotspot JVM 的已发布版本中看到了错误(不幸的是,我目前没有详细信息),这些错误在特别奇怪的情况下可以重现。我不知道它们是否是由于特定的优化。
关于optimization - 编译器优化会引入错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722302/