optimization - 编译器优化会引入错误吗?

标签 optimization compiler-construction compiler-optimization

今天我和我的一个 friend 讨论了几个小时关于“编译器优化”的问题。

我为 的观点辩护。有时 ,编译器优化可能会引入错误,或者至少会引入不希望的行为。

我的 friend 完全不同意,说“编译器是由聪明人构建的,做聪明的事情”,因此可以从不出错。

他根本没有说服我,但我不得不承认我缺乏现实生活中的例子来加强我的观点。

谁在这里?如果我是,您是否有任何现实生活中的示例,其中编译器优化会在生成的软件中产生错误?如果我弄错了,我应该停止编程并学习钓鱼吗?

最佳答案

编译器(和运行时)优化当然会引入不希望的行为 - 但至少只有在您依赖未指定的行为(或确实对明确指定的行为做出错误假设)时才会发生这种情况。

现在除此之外,当然编译器中可能存在错误。其中一些可能与优化有关,其影响可能非常微妙 - 事实上它们很可能是,因为明显的错误更有可能被修复。

假设您将 JIT 作为编译器包括在内,我已经在 .NET JIT 和 Hotspot JVM 的已发布版本中看到了错误(不幸的是,我目前没有详细信息),这些错误在特别奇怪的情况下可以重现。我不知道它们是否是由于特定的优化。

关于optimization - 编译器优化会引入错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722302/

相关文章:

java - 对于序列中的每个成员,确定它是否是完全平方数

sql - 对一组数据使用整数而不是 varchar *真的*值得吗?

linq - 为什么不能从这个简单的代码中推断出类型参数?

c - 为什么大多数 c 编译器没有优化此归零代码?

c++ - 使用/O2 与/Ox 编译——哪个更快(根据经验)?

c++ - C++ 类中冗余测试函数的影响

javascript - 在 JavaScript 中使用或不使用中间变量时代码是否更优化

sql-server - SQL Server : Is it worth placing BLOB/CLOB columns near the "end" of a table?

rust - 编译器(特别是 rustc)真的可以简化三角求和以避免循环吗?如何?

linux - 当我尝试链接测试文件时出现文件错误