Phi*_*lip 5 c++ build visual-studio
在Visual Studio 2005下,我们有一个带有195个cpp文件的库,大约需要2分钟来构建版本,但是大约需要6分钟来构建调试.
我一直认为发布版本应该花费更长时间,因为优化.为什么调试版本需要比发布版本更长的时间?反正有没有加快我们的调试构建速度和发布速度一样快?
我们确实有相当数量的boost/stl代码.
最好的猜测:调试版本是I/O限制的,而发布版本是处理器限制的(在这种情况下).
我们在构建系统上做了大量的基准测试 - 许多大项目,一些小项目.在DEBUG建立写出大量的*.pdb信息,更大的*.obj文件(额外的调试信息),等等.结果是大规模,更多的磁盘活动.如果你的源代码中有很多"文字"(表格,符号,字符串文字)等,这就更加突出了.
相比之下,RELEASE构建会写出更小的*.obj文件,并且不会编写"调试"数据库(如果RELEASE使用典型的开关进行编译).但是,RELEASE构建中的链接器必须进行其优化以及其他未完成的更多工作DEBUG,因此它受处理器限制.RELEASE如果您使用最具挑战性的链接器开关"编译到最大化速度/大小",这将进一步加剧时间.
(但是,是的,RELEASE构建必须仍然在可执行文件内置I/O更新地址,但由于可执行文件在RELEASE构建中要小得多,所以页面写得少得多,所以I/RELEASE构建中的O惩罚不如DEBUG构建那么多.)
你观察的是3倍" RELEASE比DEBUG" 贵".对于一些I/O绑定了大量模板,许多符号和文字等的项目来说,这是正确的.检查你的驱动器 - 它们是否已满,或者只是"慢速驱动",和/或某些坏扇区?这些会使构建更糟糕(更慢)DEBUG.
是的,其他构建应该是另一种方式," RELEASE比3x更昂贵DEBUG".这些构建是处理器/链接器绑定,而不是I/O绑定.
[更新],我在问题评论中看到这是"静态库,无链接".对于I/O的时间损失(大量磁盘活动,没有链接),并且没有处理器惩罚(因为没有进行优化),这几乎是最糟糕的情况.所以,如果你有一个3x" DEBUG- 比 - 慢 - RELEASE",那可能就像它可以获得的那样糟糕(对于这个项目),而且这不是非典型的.添加链接选项时,RELEASE速度会变慢.
我将把starbolin的评论放在这里作为答案:苹果和橙子。charley 对 I/O 限制的猜测似乎与我为调试编写的 600MB 和为发布编写的 300MB 的进程监视器计算结果并不相符。也就是说,额外写入 300MB 需要几秒钟,而不是 4 分钟。因此,我得出的结论是,调试版本和发布版本之间可能存在一些不同之处。尽管优化应该比不优化花费更长的时间,但这些其他仅调试活动必须花费更多的时间。如果能详细了解调试和发布的时间,那就太好了,但很明显,它们是完全不同的过程,调试只是需要更长的时间,至少对于 Visual Studio 2005 和我进行基准测试的项目来说是这样。