作者dogmimi (我想要好好的呼吸)
站內PHP
標題Re: [請益] 這段程式有什麼問題嗎?
時間Thu Apr 4 21:12:06 2013
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
1F:→ worry:$handle裡面的垃圾還是佔有空間的 04/04 21:44
2F:→ gname:不能強制UNSET? 04/05 00:23
3F:→ qwertmn:$handle[$i] = test(); 這為什麼要用array ? 04/05 05:48
4F:→ chenlarry:php的GC不會完全清掉,他會保留一些記憶體的參考位置 04/05 11:20
5F:→ chenlarry:以便之後使用,詳情請參考下面官方討論串 04/05 11:21
7F:推 MOONRAKER:樓上贊 04/06 01:42
8F:→ dogmimi:以上 感謝啦!!!!! 04/06 12:08
9F:推 i9100:我覺得.... $handle[1000000000000]你覺得需要用多少記憶體? 04/24 17:22
10F:→ i9100:就算資料結構不算...index就到1T了..你記憶體有這麼大? 04/24 17:23
11F:→ i9100:另外,fclose()應該是因為古老時代file descripter是有上限 04/24 17:24
12F:→ i9100:的。(OS常用作法就是把各種周邊視為檔案)記得dos似乎是20個 04/24 17:25
13F:→ i9100:而其中3拿來給stdin,stdout,stderr。所以你的程式照20年前標 04/24 17:26
14F:→ i9100:準來看,若不fclose(),你開啟第18個檔案就會資源不足 04/24 17:26
15F:→ i9100:若沒記錯,20年前unix c也是只能開啟17個檔案。以上觀念說明 04/24 17:27