我有一个用C/C++编写的控制台应用程序。通常需要5-10分钟才能在非windows平台上编译,即使优化标志设置为-o3。但是,如果将优化标志设置为Full Optimization (/Ox) Any Suitable (/Ob2),在visual中将内联函数扩展设置为,则在Windows 上编译大约需要1-2小时。这种情况在发布/调试模式下都会发生。
我知道编译器正在试图优化代码,因此它必然要花费更多的时间,但与其他编译器(主要是g++)在非windows平台上所花费的时间相比,这不是太长了吗?
到目前为止我试过.
从源文件和头文件中删除不必要的头文件,在可能的情况下引入前向声明,但不要暂停。
我分析了所有的头文件。在项目中的大约50个头文件中,模板很少用于2-3个头文件中.这些标头也没有广泛地包含在源文件中。
我对这种行为有两种观察-
有没有人知道怎么找出这里出了什么问题?可能的起点将是确定每个文件所占用的编译时间。如何找到每个文件的编译时间?
如果我还能改进/尝试一些东西,会有可能吗?
这里是关于硬件、源代码等的更多详细信息,如注释中所要求的
RAM - 8.0 GB内存
操作系统- Windows 7 64位
处理器- Intel Core i5 2.6 GHz
Visual 2013终极版
注意-如果我禁用优化(set /Od and /Ob0 flags in VS),那么程序编译在同一台机器上不到5分钟。
源文件-大约55,头和源文件各和80KLOC代码。
发布于 2015-03-10 17:12:59
根据在评论中收到的建议,我首先找出了每个文件所占用的编译时间:
当我打开源文件时,我在代码中看到了一些可怕的错误,这与我的观察结果形成鲜明对比。这是一个巨大的27 27KLOC的怪物文件(Opps!,当然我没有写这个文件)。动态创建并分配给数组的类有739个实例。每个实例也会动态地创建它的一些成员。在此文件中正在创建数千个对象。
为了确保这个文件是罪魁祸首,VS工作室对这个文件进行了太多的优化。按照@Predelnik在注释中的建议,我禁用了该文件中的优化。哇哦!程序在几分钟内编译。这个源代码需要一个严肃的重新分解。
如果有人面临这样的问题,我会这样做-
发布于 2015-03-10 12:34:32
有没有人知道从哪里开始找出这里出了什么问题?
没有更多的细节。
如果我还能改进/尝试一些东西,会有可能吗?
是。特别是,考虑:
https://stackoverflow.com/questions/28963669
复制相似问题