至于为什么是 272 而不是 256,就不是很清楚了,不知道内部是怎么处理的。
代码如下:
< ?php
$test
=
str_repeat
("1",256);
$p
= &
$test
;
unset(
$test
);
echo
$p
;
//输出为 256 个 1。如果上面改为 unset($p),更不行了,echo $test 直接显示为 256 个 1
?>
也就是说内存中赋给
$a
的值仍然存在。可见 unset()并没达到释放内存的效果。
但如果在上述代码中加入
$test
=null,或者再加一个 unset(
$p
),就能达到释放内存效果了,
PHP unset()函数测试代码如下:
变量赋值为 null 方法:
代码如下:
< ?php
$test
=
str_repeat
("1",256);
$p
= &
$test
;
$s
= memory_get_usage();
$test
= null;
unset(
$test
);
//试一下将该句与$test=null 调换先后顺序,则结果将不相同
$e
= memory_get_usage();
echo
' 释放内存: '.(
$s
-
$e
);
//输出为 272
var_dump(
$p
);
//输出为 NULL
?>
将指向该地址中值的变量全部销毁的方法:
代码如下:
< ?php
$test
=
str_repeat
("1",256);
$p
= &
$test
;
$s
= memory_get_usage();
//注意,以下 2 个 unset()顺序对调没有关系,不影响结果
unset(
$p
);