找回密码
 点一下
查看: 1000|回复: 13

请问把一个新的单位组设置为另一个已经被删除的单位组会泄露么?

[复制链接]
发表于 2012-7-25 07:43:17 | 显示全部楼层 |阅读模式
比如单位组分别有Z1和Z2

Z1选取做完动作,删除

随后设置变量Z2=Z1,那么Z2有没有新建一个单位组?
发表于 2012-7-25 08:47:33 | 显示全部楼层
Z1 = 创建单位组
删除Z1  =>  Z1 = null

Z2 = Z1 = null
回复

使用道具 举报

发表于 2012-7-25 11:35:42 | 显示全部楼层
龙写了什么表示看不懂...

删除Z1后,Z1仍然还有值(因为你还没有set null)
这个值是该单位组的handle值,但是该单位组已经不能使用了(因为已经被删除了)

随后设置变量Z2=Z1,Z2并不会新建一个单位组,它指向了原来被删除的那个单位组

虽然这个单位组被删除了,但是其实它所指向的内存空间并没有得到释放...
原因是你没有set null,当然......这个单位组已经不能使用了
回复

使用道具 举报

发表于 2012-7-25 11:41:38 | 显示全部楼层
所以,如果需要排泄,就要把两个变量都set null

注:如果是全局变量则没有必要,因为那不算“泄露”
回复

使用道具 举报

发表于 2012-7-25 12:19:05 | 显示全部楼层
美味豆沙包: 龙写了什么表示看不懂...

删除Z1后,Z1仍然还有值(因为你还没有set null)
这个值是该单位组的handle值,但是该单位组已经不能使用了(因为已经被删除了)

....... (2012-07-25 11:35)
那个其实就变量记录了一个4字节的类似地址数据的东西而已。。

好吧……其实是我之前写的时候忘记变量存了数据。。[s:166]
回复

使用道具 举报

 楼主| 发表于 2012-7-27 05:54:43 | 显示全部楼层

回 chyj4747 的帖子

chyj4747:

那个其实就变量记录了一个4字节的类似地址数据的东西而已。。

好吧……其实是我之前写的时候忘记变量存了数据。。

set null是什么意思,设置没有?

我不懂J,能用T解释一下吗?
回复

使用道具 举报

发表于 2012-7-27 08:35:39 | 显示全部楼层

回 冷漠 的帖子

冷漠:set null是什么意思,设置没有?

我不懂J,能用T解释一下吗? (2012-07-27 05:54) 
就是设置变量为空

自定义代码 set udg_全局变量名 = null   就好了
回复

使用道具 举报

 楼主| 发表于 2012-7-27 08:42:55 | 显示全部楼层

回 hydralisk 的帖子

hydralisk:就是设置变量为空

自定义代码 set udg_全局变量名 = null   就好了 (2012-07-27 08:35)
噢,为什么T选项没有呢?
回复

使用道具 举报

发表于 2012-7-27 08:51:05 | 显示全部楼层

回 冷漠 的帖子

冷漠:噢,为什么T选项没有呢? (2012-07-27 08:42) 
这你得问暴雪:为什么没有!
回复

使用道具 举报

发表于 2012-7-27 08:51:45 | 显示全部楼层
冷漠:噢,为什么T选项没有呢? (2012-07-27 08:42)
全局变量设置为空与不管它没什么大区别~
唯一的区别是你不设置空你的电脑内存就多存了4字节(byte)而已~
也就是即便你有500+个没设为空的全局变量也就占了2mb。。
回复

使用道具 举报

发表于 2012-7-28 18:06:02 | 显示全部楼层
http://bbs.islga.org/read.php?tid=38522&ds=1#442144
详细资料在这里,请认真看完......

简而言之呢,就是:魔兽里面的一个对象(如:单位,单位组,点......)每当它被赋值给一个变量的时候,它的引用数就会加一;而当这个变量改变值的时候,它原来所指向的对象的引用数就会-1;如果在这个对象被删除之后,它的引用数不为0,那么它所占的内存空间就不会被释放...也就是我们常说的“记忆体遗失”(内存泄露)
set null...就是设置变量为空,如果是单位就是设为“没有单位”,目的是清空引用数
如果是对象类型的局部变量,如果你不想泄露,就需要set null
如果是全局变量则必要不大...因为当这个变量被再次赋值的时候,它的引用关系就可以改变了
回复

使用道具 举报

发表于 2012-7-30 06:08:42 | 显示全部楼层
其实handle泄露的影响是比较小的,毕竟现在不是128M内存玩war3的时代。

而且实际上handle泄露对效率的影响并不在于几个integer,而是在于令handle表变得太臃肿而增加了查表的耗时。



如果你不想每次set null的时候都写一句自定义脚本。那么可以直接在地图初始化的时候只写一次,建立一个全局单位组变量,然后用自定义脚本将它赋值为null。以后只要把它赋值给其他单位组那就也相当于把它们设为null了
回复

使用道具 举报

发表于 2012-7-30 13:08:13 | 显示全部楼层
哪泥128也能玩WAR3喵?
回复

使用道具 举报

发表于 2012-7-30 13:52:16 | 显示全部楼层
当年头目的电脑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-21 03:46 , Processed in 0.030056 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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