Compiler construction 版本与调试构建时间

Compiler construction 版本与调试构建时间,compiler-construction,build,debugging,performance,release,Compiler Construction,Build,Debugging,Performance,Release,我一直认为调试版本比发布版本慢,因为编译器需要额外生成调试器信息。我最近很惊讶地听到我的一位同事说,发布版本通常需要更多的时间。(我相信这只是因为增量链接/编译) 一般来说,两者中哪一个更快?只是一个猜测,但我假设在大多数情况下,由于优化,发布构建将花费更长的时间。嗯,有许多变量可能会影响事情。以下是调试速度更快的一些原因: 通常,调试模式所做的优化要少得多,因为这些优化可能会弄乱指令和代码行之间的映射。因此,编译器在那里做的工作更少 即使完整调试构建速度较慢,调试构建也会更频繁地发生,并且通

我一直认为调试版本比发布版本慢,因为编译器需要额外生成调试器信息。我最近很惊讶地听到我的一位同事说,发布版本通常需要更多的时间。(我相信这只是因为增量链接/编译)


一般来说,两者中哪一个更快?

只是一个猜测,但我假设在大多数情况下,由于优化,发布构建将花费更长的时间。

嗯,有许多变量可能会影响事情。以下是调试速度更快的一些原因:

  • 通常,调试模式所做的优化要少得多,因为这些优化可能会弄乱指令和代码行之间的映射。因此,编译器在那里做的工作更少
  • 即使完整调试构建速度较慢,调试构建也会更频繁地发生,并且通常可以比发布构建更多地利用增量构建。因此,调试构建通常不需要像发布构建那样做那么多工作

    • 调试版本通常更快,因为没有进行优化(这在发布版本中非常常见)

      您可以选择不使用可执行文件生成调试符号,也不进行优化,但这对于发布版本来说是很奇怪的。虽然我认为它会建得更快


      调试和发布之间的主要区别在于调试是为了调试(因此包括调试符号),发布是为了运行得更快,所以您使用了强优化

      总的来说,我希望调试构建的速度更快,但运行得更慢,发布构建的时间更长,但最终结果会更快


      这取决于版本可能有更积极的优化,这些可能会干扰可调试性。此外,一些较大规模的优化确实需要很长时间。在目标文件中插入调试信息的时间短到可以忽略,可能比从磁盘上读取源代码花费的时间要少。

      发布版本速度更快的主要原因是编译器对其进行了大量优化。例如,它可以展开循环、删除不必要的变量和内联函数。优化不是一项简单的任务,需要大量的计算能力,因此会减慢构建速度

      大多数编译器都允许您在发布版本上关闭优化。试试这个。您的构建时间将缩短。您还可以在调试构建上启用优化,并看到构建时间的增加