游戏服务器程序基础1-内存/类型转换/编程习惯

作者: 分类: 程序开发 发布时间: 2010-12-29 12:57

内存管理方式

游戏服务端的工作主要就是实时的处理用户的逻辑,存取,大量数据包的收发,这其中,网络因素是一个重要的原因,这个东西无法避免,但是更重要的是程序内部的运作方式,通常我们知道,程序中最耗资源与硬件的不是程序的执行和操作,主要是内存和资源的频繁切换,让CPU和内存一直在忙。其实就是 new/delete的问题,他们一般都是用来申请小块内存的,长时间申请问造成内存出现碎片,从而导致机器性能下降,对服务器程序来说,响应速度像生命一样,所以,传统的内存管理方式就行不通了。

为了避免使用new/delete带来的问题,一般采用两种方法:

1.从一开始就是用静态分配内存后再使用,我们知道,静态内存申请后会在程序运行时一直使用,不会释放,只能改变其中存的数据,这样就避免了大量的申请与释放内存的操作。

2.使用MemoryPool(内存池),这块的内存池得自己写,一般的游戏中都有自己单独写的内存池代码,这个后面再说。

在制作服务器程序,这两种都有使用,不过大块的内存基本都是使用MemoryPool,小块且局部内存基本使用静态内存。

类型的问题

这块的东西主要是个人习惯问题,如果有优良的编程习惯,一般没什么问题。特别是像类型转化与typedef的时候需要注意一下。

Const的使用

其实我觉得这个问题我不应该多说,该用的地方用就行了,不过很多人就吃亏在这个const上了,这个东西用多了就熟悉了,多用几次,肯定会熟练的。主要是看清楚const的位置,它是将这个常属性加在了那个部分,这样基本就没有什么问题了。

类型转化的方法

一般的数据类型转化的方法,基本都是强制转化,不过这样某些时候会带来一些非确定的问题。一般是基本数据类型可以直接强转类型,继承类对象之间可以强转类型,转化方式大家都很清楚,如下:

(Type*)SourceType // Type 为要转为的类型,SourceType为原来要转的对象

类型转化还存在以下四种转化方式,

dynamic_cast 主要是在相互间有继承关系的对象指针或者引用之间做类型转化的时候经常使用到。一般(type*)强转类型就是使用dynamic_cast

static_cast 只是逻辑上的功能类型转换,大部分用在继承关系的指针类型转换

reinterpret_cast 他是一种没有任何限制的类型的转换,从任何类型可以转化到任何类型,不过这个时候,编译器就不负任何责任了。如果你愿意使用,就使用吧。

const_cast 主要用于将const常量转换为non-const类型

其他的一些功能大家去网上搜下,说的肯定更详细。我就不做赘述了。

希望大家喜欢,有问题,欢迎指正和补充.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

3条评论
  • Icecube

    2012 年 5 月 1 日 17:18

    继续支持楼主,分享更多的好文章来学习……

    潜水 傲游浏览器 Windows 7
  • 爱无言

    2011 年 3 月 9 日 09:35

    呵呵,遇到同行感觉很亲切。
    我自认为,游戏服务器里stl使用的非常频繁。游戏服务器里经常需要加载/释放缓存,并且对于排序stl也做的很不错,像sort(),partial_sort()。在一个服务器里查找和搜索也非常频繁,要是像我这样的对算法一窍不通的,学好stl也挺实用的。游戏服务器里有大量的权限验证,所以对位操作运用比较熟练也能降低程序的复杂度。
    我新手,说的不对的地方,博主见谅。

    潜水 Chrome浏览器 Windows XP
    1. eliteYang

      2011 年 3 月 9 日 22:21

      呵呵,欢迎访问,算法是很麻烦,不过用处很大,如果有机会深入学习,还是能再学习的。你说的很对,服务器里的确很多关于位操作的

      大师 火狐浏览器 Windows 7

发表评论

电子邮件地址不会被公开。 必填项已用*标注