· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

Linux系统编程之C++游戏程序优化 (1)

发布时间:2006.11.15 06:42     来源:赛迪网技术社区    作者:yuanyang

一般而言,比起C程序来说,C++游戏程序是可重用和可维护的。可这真的有价值吗?复杂的C++可以在速度上与传统的C程序相提并论吗?

如果有一个好的编译器,再加上对语言的了解,真的有可能用C++写出一些有效率的游戏程序来。本文描述了典型的几种你可以用来加速游戏的技术。它假设你已经非常肯定使用C++的好处,并且你也对优化的基本概念相当熟悉。

第一个经常让人获益的基本概念显然是剖析(profiling)的重要性。缺乏剖析的话,程序员将犯两种错误,其一是优化了错误的代码:如果一个程序的主要指标不是效率,那么一切花在使其更高效上的时间都是浪费。靠直觉来判断哪段代码的主要指标是效率是不可信的,只有直接去测量。第二个概念是程序员经常“优化”到降低了代码的速度。这在C++是一个典型问题,一个简单的指令行可能会产生巨大数量的机器代码,你应当经常检查你的编译器的输出,并且剖析之。

1、对象的构造与析构

对象的构造与析构是C++的核心概念之一,也是编译器背着你产生代码的一个主要地方。未经认真设计的程序经常花费不少时间在调用构造函数,拷贝对象以及初始化临时对象等等。幸运的是,一般的感觉和几条简单的规则可以让沉重的对象代码跑得和C只有毫厘之差。 除非需要否则不构造。最快的代码是根本不运行的代码。为什么要创建一个你根本不去使用的对象呢?在后面的代码中:

   voide Function(int arg) 
   { 
     Object boj; 
     If(arg==0) 
       Return; 
     ... 
   }

即便arg为0,我们也付出了调用Object的构造函数的代价。特别是如果arg经常是0,并且Object本身还分配内存,这种浪费会更加严重。显然的,解决方案就是把obj的定义移到判断之后。

小心在循环中定义复杂变量,如果在循环中按照除非需要否则不构造的原则构造了复杂的对象,那么你在每一次循环的时候都要付出一次构造的代价。最好在循环外构造之以只构造一次。如果一个函数在内循环中被调用,而该函数在栈内构造了一个对象,你可以在外部构造并传递一个应用给它。

1.1 采用初始化列表

考虑下面的类:

   class Vehicle 
   { 
   public 
     Vehicle(const std::string &name) 
     { 
       mName=name 
     } 
   private: 
     std::string mName; 
   }

因为成员变量会在构造函数本体执行前构造,这段代码调用了string mName的构造函数,然后调用了一个=操作符,来拷贝其值。这个例子中的一个典型的不好之处在于string的缺省构造函数会分配内存,但实际上都会分配大大超过实际需要的空间。接下来的代码会好些,并且阻止了对=操作符的调用,进一步的来说,因为给出了更多的信息,非缺省构造函数会更有效,并且编译器可以在构造函数函数体为空的情况下将其优化掉。

   class Vehicle 
   { 
   public 
     Vehicle(const std::string &name):mName(name) 
     { } 
   private: 
     std::string mName; 
   }

1 2 3 4 5 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 如何制作Linux操作系统下的USBKey (11-14) · 游戏玩家呼吁打击外挂 质疑盛大查处不力 (11-14)
· 游戏中的IT管理 (11-14) · 如何远程实现为Linux服务器添加新分区 (11-14)
· Linux架设支持Mysql的动态Web服务器 (11-14) · 微软握手Novell:狼爱上了羊? (11-14)
· 在Linux环境中如何配置WU-FTP服务器 (11-14) · Linux系统下NFS的配置与注意的问题 (11-14)
· Linux操作系统异构网络中P2P流量情况 (11-14) · 用Openvpn快速建立Linux下的加密代理 (11-14)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
特别策划:视频网站系列访谈
·专题:网游虚拟货币新规..
·直播:2009中国保险行业..
·专题:三起传闻 揭秘九..
2009年中国电信业信息化论坛直播
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
·专题:处罚窜货遭拒卖 ..
InfoComm 2009 视听与集成设备展新品
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
·全球高性能计算TOP500名..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..