赛迪网 > IT技术 Linux > 最新更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专家:从第三方法律服务看我国信息化法制建设
· 信息化的边际效益分析:民营企业不上ERP会怎样
· 特别专题:排队时代电子银行如何补上行业短板
· 股市洪峰背后的IT:信息系统如何应对负载考验
· 案例分析:计划不如变化快 IT该不该实施预算制
· 北京:公交卡用途增多可购物买药 不推行实名制
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管