首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在开启优化的情况下,C++代码的“预期”速度会有多快?

在开启优化的情况下,C++代码的“预期”速度会有多快?
EN

Stack Overflow用户
提问于 2020-03-31 21:33:59
回答 1查看 109关注 0票数 2

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 21:43:54

在开启优化的情况下,C++代码的“预期”速度应该有多快?

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

在实践中:视情况而定。一些程序可以从优化中获得比其他程序更多的好处。有些行为比其他行为更容易证明。一些优化甚至会使程序变慢,因为编译器无法知道运行时可能发生的一切。

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

我的问题是,有这么大的速度是正常的吗?

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

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

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

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

请告诉我..。是否..。代码... 可以 ...成为..。手工优化,而不是依赖于编译器。

一切都可以手工优化,至少如果你用汇编语言编写程序的话。

...或者应该 ...

不是的。没有理由浪费时间去做编译器已经为你做的事情。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60951870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档