发布版本通常比调试版本更快,因为发布版本进行了大量优化。即使我编写的是最快速度的性能代码,也是如此。
但是,使用调试模式编写的C ++代码是否可能与发布版本一样快呢?
我只是好奇我的代码是否太慢了,因为我在进行性能测试时注意到了明显的差异。
发布版本通常比调试版本更快,因为发布版本进行了大量优化。即使我编写的是最快速度的性能代码,也是如此。
但是,使用调试模式编写的C ++代码是否可能与发布版本一样快呢?
我只是好奇我的代码是否太慢了,因为我在进行性能测试时注意到了明显的差异。
选择一个好的算法肯定会在调试编译中速度上有很大差异,但是调试编译永远不可能像发布版本一样快。这是因为优化器完全以不同于调试编译的方式安排寄存器,尝试使代码运行更快,而调试编译器则试图保留临时变量的值,以便您可以从调试器中读取。
由于您可能拥有比CPU寄存器更多的变量,这意味着调试编译器将发出指令将这些值复制到RAM中。而在发布版本中,如果该值不再使用,优化器将直接将其丢弃。
一般而言,这取决于情况。
有些发布版本可能与调试版本没有区别。
还取决于调试版本和发布版本之间的配置差异。如果唯一的区别是调试版本中的符号信息,则它们将具有相同的性能。
在我的工作室里,我们正在发布调试软件。可执行文件不带任何符号进入Flash。
如果您的代码中有数据结构验证,那么调试速度可能比发布版本慢很多。
另一方面,如果您的应用程序大部分时间都在调用系统例程,如I/O、内存分配、信号量等,则发布版本与调试版本的速度差别不大。
另外,如果您的程序具有使用大量自身时间的函数,则在发布版本中这些函数将更快。
string& GetText() { return text: }
- jeromintus