作者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
1F:→ AlanSung:试看看改用 state 04/28 15:05
2F:→ AlanSung: use feature 'state'; 04/28 15:06
4F:→ Pumbaa:请问楼上 1B30XYbN (Perl) 是在哪找? 04/28 15:51
5F:→ Pumbaa:请问一二楼 state 不是用来宣告 persistant private var 吗 04/28 15:57
6F:→ Pumbaa:如此一来如何会达到释放记忆体的效果呢? 04/28 15:57
7F:推 AlanSung:是没释放,不过也许不会浪费更多? 04/28 16:37
8F:推 AlanSung:btw, undef @xxxx; 顺便也加上去吧 04/28 16:46
9F:→ AlanSung:上面那行和用 state 与否无关 04/28 16:47
10F:→ CindyLinz:就在文章列表按 #1B30XYbN 喽 04/28 17:09
11F:→ mantour:直接把 `#1B30XYbN' 复制在文章列表贴上 04/28 17:09
12F:→ mantour:记得不要漏掉 `#' 04/28 17:09
13F:→ Pumbaa:问题已解决,晚点po心得文 感谢各位高手 m(_ _)m 04/28 18:29