繁体   English   中英

启用优化后,C++ 代码“应该”要快多少?

[英]How much faster is C++ code "supposed" to be with optimizations turned on?

我有一个程序,在没有任何选项的情况下使用 g++ 进行编译时,该程序运行时间约为 1 分钟。 然而,使用 -O3 编译使其运行时间约为 1-2 秒。

我的问题是,速度如此之快是否正常? 或者我的代码可能太糟糕了,优化会占用那么多时间。 显然我知道我的代码并不完美,但由于这个巨大的加速,我开始认为它比我想象的更糟糕。 请告诉我什么是“正常”的加速量(如果有的话),以及过快的加速是否意味着可以(并且应该)轻松地手动优化而不是依赖编译器的糟糕代码。

开启优化后,C++ 代码“应该”有多快?

理论上:不一定需要有任何速度差异。 速度差也不存在任何上限。 C++ 语言根本没有指定优化和缺乏优化之间的区别。

在实践中:这取决于。 有些程序比其他程序更能从优化中获益。 有些行为比其他行为更容易证明。 一些优化甚至会使程序变慢,因为编译器无法知道运行时可能发生的所有事情。

... 1 分钟 ... [优化] 使其在大约 1-2 秒内运行。

我的问题是,速度如此之快是否正常?

这是完全正常的。 你不能假设你总是会得到同样多的改进,但这并不是不寻常的。

或者我的代码可能太糟糕了,优化会占用那么多时间。

如果程序在优化后很快,那么它就是一个快速程序。 如果程序在没有优化的情况下很慢,我们不在乎,因为我们可以启用优化。 通常,只有优化的速度是相关的。

快比慢好,尽管这不是程序的唯一重要指标。 可读性、可维护性,尤其是正确性更为重要。

请告诉我......代码......是否可以......手动优化而不是依赖编译器。

一切都可以手动优化,至少如果您用汇编编写程序。

……或者应该……

不。没有理由浪费时间做编译器已经为您完成的工作。


有时有理由手动优化编译器已经很好优化的东西。 相对加速不是这些原因之一。 一个有效原因的例子是,当涉及实时要求(无论是硬的还是软的)时,未优化的构建可能太慢而无法用于调试目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM