【发布时间】:2014-10-23 21:21:45
【问题描述】:
发布版本总是比调试版本快吗(因为发布版本优化了很多)?即使我编写了性能最快的代码?
或者是否可以编写与 Release Build 一样快的 C++ 代码(使用调试)?
我只是好奇我的代码是否太慢,因为我在进行性能测试时注意到了一个可观的差异。
【问题讨论】:
-
在进行分析时,您应该始终启用优化运行,因为除了极其简单的代码或内联汇编之外,通常会生成不同的指令(甚至,在库的情况下,将编译不同的 C++ 代码,例如在 STL 的 MSVC 实现中)。
-
我也注意到一个不同之处,对于具有小方法调用(getett/setter)的简单程序 - 当然是在一个循环中 - 没有任何其他 liaberies,即使我使用内联等来获得一个好的性能
-
一般来说,发布版本会比调试版本快。但是,如果您好奇是否可能在 Debug 中编写更快的代码,答案是肯定的。不过这会很棘手 - 一个示例可能是构建代码,以便加载未优化的程序集,作为副作用,加热一些稍后访问的缓存行。
-
@Shaktal:你说在分析时你应该总是在启用优化的情况下运行。我认为这取决于您是简单地衡量性能还是积极尝试寻找性能错误。这些是不同的目标。性能错误是程序浪费时钟时间做一些不必要的事情。你不会希望程序很快就能找到它。您可以通过debugging what it is spending time on 找到它。优化器无法删除一个人可能正在做的不必要的事情,但它会使它们难以找到。
-
“发布版本”和“调试版本”是您制作的。它们只是不同的编译器标志集,这样命名是为了给人一种印象,即一个应该用于调试,另一个用于发布。通常(尽管它在很大程度上取决于应用程序域),您确实不想要这个,因为您想调试您提供给客户的东西,反之亦然。 Visual Studio IDE 默认为所有新项目添加两个这样的配置这一事实并不意味着这是 C++ 软件开发的自然规律......
标签: c++ performance debugging release