background image

$mm

=memory_get_usage(); 

//unset()后再查看当前占用内存

echo

 

$m

-

$mm

;

?>
 
这个例子,和上面的例子几乎相同,唯一的不同是,

$s

由 256 个 1 组成,即比第一个例

子多了一个 1,得到结果是:272

 

。这是否可以说 明,unset(

$s

)已经将

$s

所占用的内存销毁

了?
通过上面两个例子,我们可以得出以下结论:
结论一、unset()函数只能在变量值占用内存空间超过 256 字节时才会释放内存空间。
那么是不是只要变量值超过 256,使用 unset 就可以释放内存空间呢?我们再通过一个例
子来测试一下:
代码如下:
 
<?php

$s

=

str_repeat

('1',256); 

//这和第二个例子完全相同

$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(),如下: