[觸發]無聊的小筆記 全域變數VS區域變數

各類的進階專題研究、WE Bug討論等。

版主: crassorz, tv580025

[觸發]無聊的小筆記 全域變數VS區域變數

文章tv580025 » 2009年01月17日 5:12 pm

大家都知道區域變數用完要set null

不過應該很少人也把全域變數也set null吧?(我除外)

最近考完試 逛了一下GA

看到http://islga.org/bbs/read.php?tid=23577[17樓]

全域變數不set null的話

他所指向的位置系統會認定還在使用中

所以函數結束後不會被自然釋放

故以後大家不管看到啥變數

用完都要set null喔!!

-----------------------------
筆記結束
圖檔
http://weo.sabi.tw/blog <= 這是我的部落格
http://plurk.com/Neo_Yang <= 噗浪請按我


圖檔  凡事不經思索便行動 一條腸子直通到底的笨蛋
頭像
tv580025
冰霜翼龍
冰霜翼龍
 
文章: 1644
註冊時間: 2006年02月09日 12:29 pm
來自: Matrix

Re: [觸發]無聊的小筆記 全域變數VS區域變數

文章Weberkkk » 2009年02月08日 4:48 pm

目前的記憶體漏失測試方式並不準確

我的煙火秀放沒幾下就會吃掉150M記憶體
比很多有漏失的地圖吃的記憶體還多!
但持續放很長一段時間,仍然沒有觀察到任何記憶體漏失的現象
如LAG或效能降低等等的,縮小視窗再放大也很順暢

因此無法將記憶體消耗量與記憶體漏失畫上等號

另外,極限工作室的專業程式設計師[柚子]認為,區域變量也沒有漏失
目前的理論是基於WEer錯誤的測試方式,而推測出的結論

在此附上吃記憶體吃超凶的地圖...
◆◆◆◆◆ 《 免費線上簽約服務,你也可以改變世界 》 ◆◆◆◆◆
 
「你知道打一場三國,會消耗多少能量嗎? 燃燒的能量,少於栽培的能量。」
「宇宙能量在不斷減少,所以WB發明了將玩家感情轉換為宇宙能量的技術。」
「主堡被推掉的瞬間,因戰敗爆發的各種情感,就是WB想蒐集的宇宙能量。」
「默契越好的玩家,釋放的能量越大,最厲害的團隊,會爆發出最強的能量。」
「XD化程度與能量蒐集率有關,WB理所當然的進行三國XD改造與實驗。」
「每次RE都會造成平行世界能量增幅,再過不久也許能培育出三國之神吧。」
頭像
Weberkkk
騎士
騎士
 
文章: 241
註冊時間: 2008年04月14日 12:06 am

Re: [觸發]無聊的小筆記 全域變數VS區域變數

文章tv580025 » 2009年02月12日 9:32 pm

Weberkkk 寫:目前的記憶體漏失測試方式並不準確

我的煙火秀放沒幾下就會吃掉150M記憶體
比很多有漏失的地圖吃的記憶體還多!
但持續放很長一段時間,仍然沒有觀察到任何記憶體漏失的現象
如LAG或效能降低等等的,縮小視窗再放大也很順暢

因此無法將記憶體消耗量與記憶體漏失畫上等號

另外,極限工作室的專業程式設計師[柚子]認為,區域變量也沒有漏失
目前的理論是基於WEer錯誤的測試方式,而推測出的結論

在此附上吃記憶體吃超凶的地圖...

從我們強大的BJ函數得知

很多區域變數都沒有set null的

而區域變數沒有set null只是造成一組數據的漏失
(詳細說明請按此連接http://islga.org/bbs/read.php?tid=10851)

跟handle的洩漏比起來 實在是小巫見大巫了
圖檔
http://weo.sabi.tw/blog <= 這是我的部落格
http://plurk.com/Neo_Yang <= 噗浪請按我


圖檔  凡事不經思索便行動 一條腸子直通到底的笨蛋
頭像
tv580025
冰霜翼龍
冰霜翼龍
 
文章: 1644
註冊時間: 2006年02月09日 12:29 pm
來自: Matrix

Re: [觸發]無聊的小筆記 全域變數VS區域變數

文章Weberkkk » 2009年02月12日 10:24 pm

引述自樓上的連結

也就是每一个编号对应12字节的数据,每当游戏创建一个新的HANDLE(注意不是设置一个变量,而是要用CreateUnit之类的能返回HANDLE的函数时,游戏会自动搜索表中的可用位置并写入一个HandleTableElement数据),而当设置一个变量时,比如set U=某个单位,则U被附值这个单位的编号(例100096),同时100096编号对应的HandleTableElement.VarCount+1,在例如RemoveUnit之类的函数运行时,HandleTableElement.HandleAddress被清空,但是其变量连接数VarCount并不会减1,只有当你设置SET U=NULL时,其值才会减少(只是针对局部变量,全局变量原理有异),而如果VarCount不为0,则这个HandleTableElement不能被重新利用,于是我们常说的局部变量泄露便产生了,可以看出,每泄露一个局部变量,就是泄露了12字节的内容,积少成多,泄露量还是很可观的.



因此局部變量有洩漏,而全局變量沒有
觀察記憶體消耗量的測試並不可靠,這點已經在我的地圖被證實
◆◆◆◆◆ 《 免費線上簽約服務,你也可以改變世界 》 ◆◆◆◆◆
 
「你知道打一場三國,會消耗多少能量嗎? 燃燒的能量,少於栽培的能量。」
「宇宙能量在不斷減少,所以WB發明了將玩家感情轉換為宇宙能量的技術。」
「主堡被推掉的瞬間,因戰敗爆發的各種情感,就是WB想蒐集的宇宙能量。」
「默契越好的玩家,釋放的能量越大,最厲害的團隊,會爆發出最強的能量。」
「XD化程度與能量蒐集率有關,WB理所當然的進行三國XD改造與實驗。」
「每次RE都會造成平行世界能量增幅,再過不久也許能培育出三國之神吧。」
頭像
Weberkkk
騎士
騎士
 
文章: 241
註冊時間: 2008年04月14日 12:06 am

Re: [觸發]無聊的小筆記 全域變數VS區域變數

文章tv580025 » 2010年05月12日 8:41 pm

Weberkkk 寫:因此局部變量有洩漏,而全局變量沒有
觀察記憶體消耗量的測試並不可靠,這點已經在我的地圖被證實

最近有點閒稍微檢查了一下

你地圖Handle洩漏蠻嚴重的

造成記憶體膨脹是理所當然

所以並無法證實首篇之論點
圖檔
http://weo.sabi.tw/blog <= 這是我的部落格
http://plurk.com/Neo_Yang <= 噗浪請按我


圖檔  凡事不經思索便行動 一條腸子直通到底的笨蛋
頭像
tv580025
冰霜翼龍
冰霜翼龍
 
文章: 1644
註冊時間: 2006年02月09日 12:29 pm
來自: Matrix


回到 專題討論區

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客