作者Pumbaa (aaa)
看板Perl
標題[問題] my 與 區域變數記憶體釋放
時間Wed Apr 28 14:59:12 2010
我使用perl約也有兩年了
但最近有個問題十分不解
是關於使用my 與區域變數記憶體釋放
我的程式碼如下
===================================
14 @aChr = (1 .. 25);
15
16 for my $curChr (@aChr){
17 my @aRead = ();
18 my @aBeg = ();
19 my @aEnd = ();
20 my @aPNC = ();
21
22 getAllReads($curChr, \@aRead); #@aRead 每iter會讀1GB的檔案
23 # 因此@aRead 約 5GB
24 calculateAccumulation(\@aRead, "b", \@aBeg); #造出 @aBeg 約 1 GB
25 calculateAccumulation(\@aRead, "e", \@aEnd); #造出 @aEnd 約 1 GB
26
27 calculatePNC(\@aBeg, \@aEnd, \@aPNC); #造出 @aPNC 約 2 GB
28 outputPNC($curChr, \@aPNC); #將 @aPNC 的內容寫出檔案
29
30 }
===================================
我使用的hp工作站有 48GB 的 Memory
我以為17~20行的陣列皆為 for迴圈內的區域變數,因此每個 iteration 後會釋放記憶體
但執行後發現這個script在跑幾個迴圈之後,把48G的記憶體全部用完了,
進入了無盡的mem swap
我孤狗了my的用法,也爬了文,
得到的答案似乎都符合我原先的認知 (my宣告的變數 scope 在 block 內)
但執行後記憶體用完又是鐵一般的事實。
求救各位高手,問題出在哪,怎樣寫才對呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.73.179
→ AlanSung:試看看改用 state 04/28 15:05
→ AlanSung: use feature 'state'; 04/28 15:06
→ Pumbaa:請問樓上 1B30XYbN (Perl) 是在哪找? 04/28 15:51
→ Pumbaa:請問一二樓 state 不是用來宣告 persistant private var 嗎 04/28 15:57
→ Pumbaa:如此一來如何會達到釋放記憶體的效果呢? 04/28 15:57
推 AlanSung:是沒釋放,不過也許不會浪費更多? 04/28 16:37
推 AlanSung:btw, undef @xxxx; 順便也加上去吧 04/28 16:46
→ AlanSung:上面那行和用 state 與否無關 04/28 16:47
→ mantour:直接把 `#1B30XYbN' 複製在文章列表貼上 04/28 17:09
→ mantour:記得不要漏掉 `#' 04/28 17:09
→ Pumbaa:問題已解決,晚點po心得文 感謝各位高手 m(_ _)m 04/28 18:29