VC ++编译时间和性能

时间:2010-07-01 20:49:04

标签: performance optimization visual-c++ compiler-construction

我正在开发一个多平台项目(MacOS,Linux和Windows),在尝试编译VS C ++ 2010中的大型源文件时,我遇到了一些性能问题。

这是一个小背景。项目中有一个800KB大的.cpp文件。文件的大小是由我正在编译包含图像信息的数组引起的。所以,它是一个巨大的无符号字符数组,无法拆分。

现在,我在过去的几个月里一直在研究MacOS,所以直到几天前我才注意到这个问题。在MacOS和Linux中,gcc在一秒左右的时间内编译文件,但是当我使用VC ++时,它需要大约一个小时。

起初我虽然它是由计算机本身来装的,因为它不是一个快速的计算机。但后来我在同一台机器上尝试了Cygwin和GCC 4,编译时间几乎和MacOS一样快。因此,我必须假设问题是由VC ++ 2010中的某些内容引起的。

我没有以任何形式调整VC ++。项目文件由CMake生成,所以我认为这里应该有一些优化空间。任何帮助将不胜感激。

感谢。

埃尔南

2 个答案:

答案 0 :(得分:1)

您是否有机会将大型数组放入单独的资源文件并以这种方式读取?如果那个数组确实是问题,那就是我要解决这个问题的方法。如果做不到这一点,我会将数组放在自己的文件中,这样它就不会经常重新编译。

答案 1 :(得分:0)

在解析数组初始值设定项时,看起来VC ++有一些O(n ^ k)部分,其中k> 1;

这有资格作为你无法做多少的逻辑错误,但可能工作的东西是

unsigned char bdata[][100] = {
    { 0x01, 0x02, ... , 0x63} ,
    { 0x64, 0x65, ... , 0xC7} ,
    { 0xC8, 0xC9, ... , 0x2B} ,
    ...
};
unsigned char *data = &(bdata[0][0]);

这打破了100字节行的数据... 可能这将被VC快速解析/编译(只是我已经给出了症状的嫌疑人)而且它应该' t多改变你的构建过程。

我不使用VC ++ 2010,因此无法检查。

请注意,在这种情况下sizeof(数据)将只是指针的大小而sizeof(bdata)将改为图像的大小,但向上舍入到行的大小的倍数

如果这个版本以相同的速度运行,不幸的是代码的字节数是O(n ^ k),如果你想把它编译成一个数组,你基本上就注定了。

另一种选择可能是使用一个巨大的字符串文字...编译器可能会更好地工作(可能是他们为字符串文字编码一个特殊的代码路径,因为“大”文字不是那么罕见),但你的代码生成器将必须处理特殊字符的逃避。