[問題] my 與 區域變數記憶體釋放

看板Perl作者 (aaa)時間14年前 (2010/04/28 14:59), 編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/1
我使用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
試看看改用 state
04/28 15:05, 1F

04/28 15:06, , 2F
use feature 'state';
04/28 15:06, 2F

04/28 15:07, , 3F
你檢查一下有沒有出現這篇所說的現象 #1B30XYbN (Perl)
04/28 15:07, 3F

04/28 15:51, , 4F
請問樓上 1B30XYbN (Perl) 是在哪找?
04/28 15:51, 4F

04/28 15:57, , 5F
請問一二樓 state 不是用來宣告 persistant private var 嗎
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
btw, undef @xxxx; 順便也加上去吧
04/28 16:46, 8F

04/28 16:47, , 9F
上面那行和用 state 與否無關
04/28 16:47, 9F

04/28 17:09, , 10F
就在文章列表按 #1B30XYbN
04/28 17:09, 10F

04/28 17:09, , 11F
直接把 `#1B30XYbN' 複製在文章列表貼上
04/28 17:09, 11F

04/28 17:09, , 12F
記得不要漏掉 `#'
04/28 17:09, 12F

04/28 18:29, , 13F
問題已解決,晚點po心得文 感謝各位高手 m(_ _)m
04/28 18:29, 13F
文章代碼(AID): #1Brzp2dJ (Perl)