游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6578|回复: 16

静态分配内存和new动态分配在游戏中有什么区别????

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-5-8 18:39:00 | 显示全部楼层 |阅读模式
比如一个类

CNpc
{
     攻击功能的函数();
};


那么使用这个CNpc的函数的时候,可以这样用


CNpc npc;
npc.攻击功能函数();

或者是

CNpc* npc;
npc=new CNpc;
npc->攻击功能函数();




我已经使用过多次,这两个都运行的不错,都没问题,但我一直疑惑,这两个分配内存的方法有在实际的应用中什么时候和场合用哪一个更合适呢?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-8 18:54:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

前者安全,但后者方便

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2005-5-8 19:47:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

使用上并不会存在太大的差别,主要的差别是在内存的使用量上
假如一个游戏场景里最多有100个人物,最少有1个人物。每个人物用一个类封装,每个类消耗1M的内存
如果是使用静态的方法,一开始就需要创建100个类的实体,消耗100M的内存
如果是动态的方法,场景里有多少个人物存在,就动态参数多少个类的实体,如果大部分时间只有30个人物,那么只消耗30M内存。内存的内测的使用量就小很多了。

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-5-8 22:31:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

啊!原来是这样,困惑了我好多时间的东西,原来是这样。

谢了!

22

主题

274

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2005-5-8 22:39:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

动态会慢,就是说一次NEW太大,会卡一下,频率高更恶劣.
静态分配在栈里,太大会不会溢出呢?!有可能吧.

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2005-5-8 23:24:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

如果担心new太多会卡,可以使用内存池(好像是这样说的)技术
就是一开始就创建N个对象,如果游戏需要创建新对象,就从这N个对象里找空闲的用,如果找不到再new,这样可以剩掉很多new的时间

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-5-9 13:15:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

静态分配在栈里,太大会溢出的。试一下就可以试出来

0

主题

11

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2005-5-9 17:01:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

C/C++中有三种内存分配形式:

1、静态分配:全局变量和static变量都分配在静态区,大小没有明确限制,直到程序消亡的时候才会释放

2、栈分配:局部变量(自动变量)、临时变量都分配在栈里,一般大小作了限制,如vc是32kb, gcc是1M。随着过程的结束(局部变量)或者表达式计算完毕(临时变量)而消亡

3、堆分配:使用 new/malloc建立的内存通常在堆里面,大小没有明确限制,可以在程序执行的任何时候进行手工回收,在进程完全结束的时候也会回收。这是最复杂的一种方式,灵活性最大。但由于是动态创建,但从程序本身看不出将会占用多少内存,不按时释放往往会造成大量内存的浪费,内存泄露也是没有及时回收造成的。

5

主题

39

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-5-9 17:49:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

尽量使用第一种方法,这样做的好处是,速度快,不容易产生内存碎片.

如果为了减少内存占用,或者会出现栈溢出的时候,考虑用第二种方法.

默认情况下,每个程序有1M的栈空间,除非一个类里面存在一个很大数组,否则不会出现栈溢出的情况


248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-5-9 19:35:00 | 显示全部楼层

Re:静态分配内存和new动态分配在游戏中有什么区别????

游戏根本就是占内存大户。
动不动就几百m,人们已经习惯了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 15:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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