游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 免费打工仔

内存池用自己管理么

[复制链接]

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2004-11-1 10:00:00 | 显示全部楼层

Re: 内存池用自己管理么

免费打工仔: 内存池用自己管理么

之前在各个网站看到介绍游戏结构的文章 说内存池管理
现在读传奇服务器的源码也看到内存池的管理

是否能用Vector 或者 list这些结构代替内存池呢?


:)用Vector来代替的话不好处理变长的情况,vector都给你定死了, 实际上vector也是先分配一个大内存,然后再拆成小的,自己写也不麻烦
不想重载new的话,还可以使用C风格的void指针.vector的话总是会比自己写的慢.
至于list,好象对内存没有保证要使用什么特别的管理,所以 。。。

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-11-1 16:08:00 | 显示全部楼层

内存池管理尽量不要用到STL

vector是肯定不能用.
list里面的小单位的new抵销了一部分效率.

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2004-11-3 16:15:00 | 显示全部楼层

Re:内存池用自己管理么

vector就很好了,只要用得正确,效率绝对没有问题。

1

主题

78

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2004-11-4 09:38:00 | 显示全部楼层

Re:内存池用自己管理么

对啊,用vector就很好用了

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-11-4 10:46:00 | 显示全部楼层

vector的话,还不如直接用个数组了,你说的可能是那种固定

rt

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2004-11-5 10:17:00 | 显示全部楼层

Re:内存池用自己管理么

打工仔你好,好久不见。
内存管理主要有如下的好处:
1、对于小内存分配等,可提高效率,因为实际上内存池只是在最开始分配够内存,分配只是从这些块中拿出来一个两个。有人说中间过程会有花销,不见得会提高效率,大凡内存管理的中间过程都是简单的内存运算或者数值运算,花销不大。变分配小内存为分配大内存同时也有一个好处就是减少内存空洞,我们曾遇到过2G的程序空间,只占用了1.5个G,但是却死活分不出内存的情况,这就是因为大量的内存空洞占居了内存区间,导致大对象(地形、物件)无法分配出必要的内存。

2、被自己管制的内存管理,可以清晰的记下内存消耗、泄漏、错误、越界等等状况,方便调试。或许你会说crtdbg.h现在可以完成这个任务,如果你做得好的话,crtdbg.h是比不上你的实现的。你可以直接把某个内存泄漏对应到唯一的语句上,很方便查错。

3、大内存分配比较灵活,这主要也是为了防止空洞的。例如我知道服务器端可能会有很多Player物件,那么我一开始就分配几千个Player的空间,new Player就是从这个列表里申请空间,delete Player就是返回空间。

内存池的管理推荐《STL源码剖析》,OGRE也实现了自己的内存管理系统,但是不推荐大家学习,因为OGRE写得比较复杂,其实内存管理很简单。

打工仔兄,祝你工作愉快^_^

29

主题

99

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2004-11-5 13:09:00 | 显示全部楼层

Re:内存池用自己管理么

用c++托管 就OK了,托管堆就相当于内存池,且自动管理内存.进行安全检查. 请将游戏逻辑需要的主要数据装载到这里面, 可以考虑用各种集合对这些数据加以调配
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 04:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表