Re: [問題] 寫Perl程式減少記憶體使用量

看板Perl作者 (jet)時間17年前 (2007/10/21 19:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《dickyhu (軒)》之銘言: : 請問一下各位高手。 : 我目前寫程式每次都會覺得記憶體的使用量超大的。 : 因為我在Perl程式中用到很多的 陣列和變數 ( @tim 、$tp) : 我看網路上說 可以在宣告陣列或變數前加一個 my @tim; : 這樣在這個陣列使用完後就可以把記憶體release出來。 : 我現在還是搞不懂什麼叫 全域變數、區域變數。 : 可以舉個例子和我解釋嗎? 謝謝。 : 像我之前寫一個程式,是去把17個目錄裡面的資料,讀出來,然後檢查檔名是不是符合規則,而每個目錄中大約都有500~1000個檔案,結果程式在跑的時候,竟然吃掉1G的記憶體,然後常常執行到一半就變成 Out of memory. : * 107-10-21 15:43:06 補充 : 請問在宣告時應該怎麼宣告呢? : my @all; : my @all={};  : undef @it; # 想要清除此陣列用 : @it=undef();   # 想要清除此陣列用 : 這幾種用法,那個是正確的啊?? 你如果是這樣寫 @files = <*.*>; foreach(@files) { if(/xxxxx/){ do something;} open F, "$_"; @a= <F>; push @b, @a; close F; } 類似這種寫法的話,你總共檔案有多大,記憶體就吃多少 這跟全域變數,區域變數無關 是程式演算法問題 undef @it 跟 @it=undef 效果差不多XD 一個是把@it完全清掉 $#it=-1 一個是把@it的內容改成undef , $it[0]=undef $#it=0 我是從這本書開始學perl的 http://www.hcchien.org/ 全域變數跟區域變數是寫程式很基本的東西 就跟中文的ㄅㄆㄇ一樣 先把那本書的前12章看完 相信這些問題自然就不成為問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.133
文章代碼(AID): #176ps4L- (Perl)
文章代碼(AID): #176ps4L- (Perl)