当前位置:早雪网网络学院编程文档其他语言 → Viusal C++的优化代码

Viusal C++的优化代码

减小字体 增大字体 作者:未知  来源:supcode.com收集整理  发布时间:2005-7-1 14:56:50
dll)尺寸优化优先于代码速度优化

    3./Oy  使用帧指针,以提高函数调用速度

    4./Ob2 编译器“觉得”应该使用内联的函数,都使用内联

    5./GF  使用只读字符串池

    6./Gy  告诉编译器将各个函数按打包格式编译



    "/O2"选项代表最快速度,它基本上与"/O1"相同,只是用"/Ot"(更快的代码)代替了
"/Os"。另外还有"/Oi"代表了展开内联函数。

   

    一般来说,对小程序使用最快优化,对大程序使用最小尺寸优化,这是因为尺寸大
的程序通常能导致加载缓慢,CACHE命中率低,系统频繁切换分布内存等问题。使用最小
尺寸优化,编译不再展开循环,也不会采用更长的代码。

   

    在选择了主要优化选项后,用profile去寻找"热区"是一个好办法,这样你可以对程
序不同部分做最适当的优化。比如如果你用最小尺寸优化后,用profile发现有几个函数
执行的很频繁,那你就可以把那几个函数按最快速度优化。

    VC编译器可以对特定函数进行优化选项!

    比如,如果你发现fiddle()函数被调用的频率很高,那你就可以让编译器只对这个
函数进行最快速度优化,这样:

#pragma optimize("t", on)

int fiddle(S *p)

{

   …;

}

#pragma optimize("", on)



    除了"/O1"和"/O2"以外,还有"/Ox"选项,它很与"/O2"效果相同,而"/Ox"与"/Os"
组合则与"/O1"效果相同。我们推荐使用"/O1"和"/O2",而不是用"/Ox"。

至此,我们讨论了"/G7","/arch"和"/GL"优化选项。



    除了上面介绍的,VC还提供了两个:

    1./GA 优化静态线程局部存储。(不要用于DLL project,用了也没效果)

    2./Gr 使用__fastcall作默认调用规则,这代表头两个参数会用寄存器传送(如果参
数能装进寄存器)。



    另外的一个选项是"/opt:ref",用它可以通知连接器,在连接时去掉没被调用的函
数和没被使用的数据。用"/opt:icf"选项能合并相同函数(比如你的程序可能通过模板展
开了好几遍),这时优化也能减小程序的尺寸。



Visual C++ .NET中的优化改进

    这儿有3个重要的优化选项,你可以把它们用在VC.NET 2003的项目中。虽然VC.NET
2002也提供了这些选项,但VC.NET 2003对它们做了性能上的改进。



下表简要的描述了它们,如果你想了解更详细的内容,请查阅VC所带的文档。



选项
效果

/RTC1
使用无优化的Debug模式,编译器插入动态检测代码以帮助你发现程序中的错误。比如
你没有初始化的内存,或者你把__stdcall和__cdecl弄混了。

/GS
加入检测静态缓冲区(栈)溢出的代码,黑客就不能覆盖函数返回的地址以执行恶意代码


注意:这不意味着你可以高枕无忧,你仍要留心编写安全的代码!

/Wp64
检测生成64位代码的问题,通过它你可以发现移植到64位环境下你的代码可能出现的问
题。
 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

不知道VC++还有没有前途.........

上一页  [1] [2] 

[数据载入中...] [返回上一页] [打 印]