VC6.0和VS2005的release编译区别
新手发问,不知道有没有发对地方,在别的论坛问过无果标题或许不太合适,问题是这样的
代码大概1000行(包含空行和注释,实际代码大概800-900行),用于一种科学计算,变量比较多,主要是float指针变量(近100个)。
在VC6.0下release生成没有什么问题,很快能生成代码,运行正常。但在vs2005下:编译...;正在链接...;正在生成代码,就停在这儿了,大概得1-2小时代码才能生成,在此期间link.exe进程一直占用50%的cpu(机器是双核),生成代码后执行也正常,但执行时间要比vc6.0生成的代码长一些。
考虑可能是release方式代码优化的问题,调了几个选项之后,发现将链接器中的优化选项的一个“使用链接时间代码生成(/ltcg)”改为“按配置优化 - 优化(/ltcg:pgoptimize)”,代码会很快生成,但运算速度很慢,运算时间大概是原时间的6-7倍,本来这个程序就是做科学运算的,速度很重要。
想知道vc6.0的release方式与vs2005区别在哪里,两者的生成代码速度为什么会差距这么大,而vs2005耗时这么长优化(可能是),程序的执行速度不如VC6.0的快,这其中有什么原因,我改怎样让vs2005代码生成速度快,而且生成的程序执行速度不会受影响。
注:Debug方式生成代码没有问题,但是debug出的程序执行速度太慢。
第二部分
附加后来的更改:
vc6.0生成release的exe文件时间不过1秒钟(观测),大小76k,程序运行时间45s左右(clock()计时)
vc2005生成release的exe文件时间2小时多(估测,上午9:30正在生成代码...,12点多跳出console框),大小52k,程序运行时间58s左右(clock()计时)
又对程序做如下更改
1.将原来宏定义的量转为变量(几个int变量Imax,Jmax,Kmax),程序中常用的Imax-1,Jmax-1,Kmax-1也用变量Im,Jm,Km代替
2.将几个值相等,但意义不同的变量赋值方式改变,如n_1=10;n_2=n_1;n_3=n_1等改为n_1=10;n_2=10;n_3=10
更改后
vc2005生成release的exe文件时间5分30秒左右(手机秒表计时),大小48k,程序运行时间58左右(clock()计时)
生成代码虽然快了,运行时间没变,还是比vc6生成的程序慢,vc2005如何进行的优化?
注:第二部分中的测试均未对vc默认编译选项进行更改