作者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