background image

$p=&$s;
$m=memory_get_usage();
unset($s); //销毁$s
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
?>
刷新页面,我们看到第一行有 256 个 1,第二行是 0,按理说我们已经销毁了$s,

而$p 只是引用$s

 

的变量,应该是没有内容了,另 外,unset($s)前后内存占用没变化!

现在我们再做以下的例子:

 

复制代码 代码如下:
<?php
$s=str_repeat('1',256); //这和第二个例子完全相同
$p=&$s;
$m=memory_get_usage();
$s=null; //设置$s 为 null
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
?>
现在刷新页面,我们看到,输出$p 已经是没有内容了,unset()前后内存占用量之

差是 272,即已经清除了变量占用的内存。本例中的$s=null

 

也 可以换成 unset(),如下:

代码如下:
<?php
$s=str_repeat('1',256); //这和第二个例子完全相同
$p=&$s;
$m=memory_get_usage();
unset($s); //销毁$s
unset($p);
$mm=memory_get_usage();
echo $p.'<br />';
echo $m-$mm;
?>
我们将$s 和$p 都使用 unset()销毁,这时再看内存占用量之差也是 272,说明这样

也可以释放内存。那么,我们可以得到另外一条结论:

结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。