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

http://tech.ddvip.com   2007年03月10日    社区交流

本文详细介绍Linux系统编程之C++游戏程序优化

  如果Function()极其重视效率,我们应当把GetPointer从一个虚函数改成内联函数。一种方式是给BaseClass增加一个新的保护的数据成员,在每一个类中设置该成员的值,在GetPointer这个内联函数中返回该成员给调用者:

   Class BaseClass
   {
   public:
     inline char GetPointerFast()
     {
       return mpPointer;
     }
   protected:
     inline void SetPointer(char *pData)
     {
       mpData = pData;
     }
   private:
     char *mpData;
   };
   void Function(BaseClass *pObj)
   {
     char *ptr= pObj->GetPointerFast();
   }

  一个更激进的方法是重新规划你的类继承树,如果Class1和Class2只有一点点不同,那么可以把它们捆绑到同一个类中去,而用一个Flag来表明它将象Class1还是象Class2一样工作,同时在BaseClass中把纯虚函数去掉。这样的话,也可以象前面的例子一样把GetPointer写成内联。这种变通看起来不是很高雅,但是在缺少Cache的机器上跑内循环时,你可能会很愿意为了去掉虚函数调用而把事情做得更加难看。

  虽然每一个新的虚函数都只给每个类的虚表增加了一个指针的尺寸(通常是可以忽略的代价),第一个虚函数还是在每一个对象上要求了一个指向虚表的指针。这就是说你在很小的、频繁使用的类上使用任何虚函数而造成了额外的负担,这些都是不能接受的。由于继承一般都要用到一个或几个虚函数(至少有一个虚的析构函数),所以你没必要在小而频繁使用的对象上使用任何继承。

作者:yuanyang    责编:豆豆技术应用

正在加载评论...