为什么某些编译器(如 gcc)要求您激活优化?为什么不默认 运行 它们?

Why do some compilers like gcc, require you to activate optimizations? Why not run them by default?

标题基本上,为什么不运行默认所有可能的优化?

当您处于编写-编译-测试周期时,启用优化不太方便:它使编译时间更长,并且使生成的代码在调试器中的工作效果不佳(因为生成的代码可能结构化非常和你写的不一样)。因此,在尝试快速实施和测试更改时,许多人更喜欢关闭优化,然后重新打开以进行最终测试和将要发布的构建。

(当然,这也有缺点。编译器只能在优化时发出一些警告,例如未初始化的变量。而且在很多情况下,有错误的代码实际上只会在优化时才会出现问题。所以更频繁地使用优化有一些好处。不过,如果您试图追踪一个可以在关闭优化的情况下重现的错误,那么以这种方式调试它肯定更容易。)

这意味着如果您要计算编译器 运行 的总次数,绝大多数将是 运行 用户不希望优化的地方。因此,将“无优化”作为默认值具有一定的意义。

当然,现在人们已经习惯了这种行为,所以即使有相反的默认值更好,改变它也会引起混乱。