游戏开发论坛

 找回密码
 立即注册
搜索
楼主: seer

游戏都需要有自己的内存管理程序吗?

[复制链接]

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-5-8 09:00:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

...已经沦为外行论坛了。。。一个外行无声无息地的飘过。。。。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-5-8 09:02:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

ps,vector的默认的分配策略已经在传统的malloc基础上调整了。还有就是,Knuth很多年前就说过,没有最好的内存分配方案,只有最合适的内存分配方案。我不知道讨论这个问题有什么意义。

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2006-5-8 09:16:00 | 显示全部楼层

Re: Re:游戏都需要有自己的内存管理程序吗?

hanma: Re:游戏都需要有自己的内存管理程序吗?

  哎,不好意思,误导新人了,查了下资料,是50万次分配和释放消耗1500MS,大约一次NEW和DELETE需要3NS,还...

  我确实挺菜的,关于这个自己分配内存的问题,我完全可以上BAIDU去查,但是我就是想先在这里问一下,看有没有回答,先请教下您,还望不吝赐教!

30

主题

569

帖子

569

积分

高级会员

Rank: 4

积分
569
发表于 2006-5-8 09:26:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

    我们的内存分配器有4种,单线程小块内存分配器,多线程小块内存分配器,类型专用的固定尺寸的内存分配器,大块内存分配器。
    预先分配一大块内存,这样可以保证不会出现内存配备失败,这在写服务器端的时候很重要。
   

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-5-8 09:37:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

结论:这个帖子没有讨论价值。

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2006-5-8 10:28:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

需要空间就new一个,不需要就释放,不知道合理不合理?
看了帖子以后,我都不知道该怎么写了~~

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2006-5-8 12:31:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

频繁的new/delete会导致大量内存碎片,
最后虽然总的内存量还很大,
但是却没有一块足够大的连续的内存空间,
结果使得内存分配失败,
一般在比较正式一点的游戏中通常会用内存池来管理内存控件~~

10

主题

62

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-5-9 11:23:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

自己写专用的内存分配器是最高效的

但是现在HP的STL库中实现了内存分配器
所以推荐使用STL库
详见侯捷的《STL源码解析》

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
 楼主| 发表于 2006-5-9 21:53:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

谢谢各位!
还有几个问题
1。分配内存的算法哪里找?(或者说:用什么关键字在Google上搜?)
2。google“重写malloc”没有结果……

14

主题

163

帖子

178

积分

注册会员

Rank: 2

积分
178
QQ
发表于 2006-5-10 03:28:00 | 显示全部楼层

Re:游戏都需要有自己的内存管理程序吗?

仔细想了想,大家还是去做内存池吧。
对于内存碎片,大家没必要在乎了,反正使用BRK和MALLOC和各种内存池都不会最终的抵制内存碎片,而且系统的SWAP机制很好了,基本上不用管内存碎片的问题(当然,如果你能作出一个不费时间的碎片整理机^_^).
倒是效率问题让我仔细的想了一想:
malloc->AllocHeap->ntdll.dll->int 2e0->brk->内核函数
|----------------------------------|--------------------|
          ring3                           ring0
这样malloc就要多费一遍穿过ring0的时间(但我没有ntdll.dll源代码,不知道这个库到底聪不聪明?),这就是我反悔的理由,hamma所说的效率问题其实是在这里;而和算法没关系,最终的brk系统调用无非就是改一下段限(堆限)的大小,所以根本不浪费时间,时间全浪费在保护切换上了.
但UNIX就不同,在那个系统可以直接调用brk系统调用,所以就不要用malloc了,还是UNIX好啊.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 12:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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