Re: [請益] 這段程式有什麼問題嗎?

看板PHP作者 (我想要好好的呼吸)時間12年前 (2013/04/04 21:12), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串2/2 (看更多)
sorry 貼錯程式碼了 <?php function test() { $handle = fopen('/tmp/testing123.txt', 'a+'); return $handle; } for($i = 0; $i < 1000000000000; $i++) { $handle[$i] = test(); fclose($handle[$i]); } ?> 我想問這樣子為什麼記憶體會一直長~? 而不會在fclose後就放掉? 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.12.187

04/04 21:44, , 1F
$handle裡面的垃圾還是佔有空間的
04/04 21:44, 1F

04/05 00:23, , 2F
不能強制UNSET?
04/05 00:23, 2F

04/05 05:48, , 3F
$handle[$i] = test(); 這為什麼要用array ?
04/05 05:48, 3F

04/05 11:20, , 4F
php的GC不會完全清掉,他會保留一些記憶體的參考位置
04/05 11:20, 4F

04/05 11:21, , 5F
以便之後使用,詳情請參考下面官方討論串
04/05 11:21, 5F

04/05 11:21, , 6F

04/06 01:42, , 7F
樓上贊
04/06 01:42, 7F

04/06 12:08, , 8F
以上 感謝啦!!!!!
04/06 12:08, 8F

04/24 17:22, , 9F
我覺得.... $handle[1000000000000]你覺得需要用多少記憶體?
04/24 17:22, 9F

04/24 17:23, , 10F
就算資料結構不算...index就到1T了..你記憶體有這麼大?
04/24 17:23, 10F

04/24 17:24, , 11F
另外,fclose()應該是因為古老時代file descripter是有上限
04/24 17:24, 11F

04/24 17:25, , 12F
的。(OS常用作法就是把各種周邊視為檔案)記得dos似乎是20個
04/24 17:25, 12F

04/24 17:26, , 13F
而其中3拿來給stdin,stdout,stderr。所以你的程式照20年前標
04/24 17:26, 13F

04/24 17:26, , 14F
準來看,若不fclose(),你開啟第18個檔案就會資源不足
04/24 17:26, 14F

04/24 17:27, , 15F
若沒記錯,20年前unix c也是只能開啟17個檔案。以上觀念說明
04/24 17:27, 15F
文章代碼(AID): #1HNNmemB (PHP)
文章代碼(AID): #1HNNmemB (PHP)