科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC++.NET 2003代码优化方法

VC++.NET 2003代码优化方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文试图让你对VC的代码优化有更直观的感觉,希望你能通过阅读本文从VC中得到更多的东西

作者:cnss 来源:论坛 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
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.NET 2003引入了两个新的优化选项,同时也改进了VC.NET 2002中的几个优化的性能,希望你能通过VC.NET 2003的优化选项来提高你程序的质量。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章