[問題] my 與 區域變數記憶體釋放
我使用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
→
04/28 15:05, , 1F
04/28 15:05, 1F
→
04/28 15:06, , 2F
04/28 15:06, 2F
→
04/28 15:07, , 3F
04/28 15:07, 3F
→
04/28 15:51, , 4F
04/28 15:51, 4F
→
04/28 15:57, , 5F
04/28 15:57, 5F
→
04/28 15:57, , 6F
04/28 15:57, 6F
推
04/28 16:37, , 7F
04/28 16:37, 7F
推
04/28 16:46, , 8F
04/28 16:46, 8F
→
04/28 16:47, , 9F
04/28 16:47, 9F
→
04/28 17:09, , 10F
04/28 17:09, 10F
→
04/28 17:09, , 11F
04/28 17:09, 11F
→
04/28 17:09, , 12F
04/28 17:09, 12F
→
04/28 18:29, , 13F
04/28 18:29, 13F