启用优化后C++代码"supposed"速度有多快?



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

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

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

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

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

。。。1分钟。。。[优化]使其运行时间约为1-2秒。

我的问题是,速度这么快是否正常?

这完全正常。你不能想当然地认为你总是会得到同样多的进步,但这并不是不寻常的。

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

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

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

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

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

。。。或者应该。。。

否。没有理由浪费时间做编译器已经为您做过的事情。


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

最新更新