【原创】unset和null的区别

        写php代码时,为了节约内存,会经常使用unset或者把变量设置为null。 但是他们有什么区别呢?让我看看看看下面的代码。看过之后,你会明白一些东西。
 
<?php
echo "小于等于256时,unset:\n";
$s= str_repeat ( '1', 256 ); //产生由255个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
unset ( $s );
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "小于等于256时,null:\n";
$s= str_repeat ( '1', 256 ); //产生由256个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
$s= null;
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "大于256时,unset:\n";
$s= str_repeat ( '1', 257 ); //产生由255个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
unset ( $s );
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "大于256时,null:\n";
$s= str_repeat ( '1', 257 ); //产生由256个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
$s= null;
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "大于256时,引用后,unset:\n";
$s= str_repeat ( '1', 300 ); //产生由256个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
$p=& $s;
unset ( $s );
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "大于256时,引用后,unset两次:\n";
$s= str_repeat ( '1', 300 ); //产生由256个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
$p=& $s;
unset ( $s );
unset ( $p );
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";

echo "大于256时,引用后,null:\n";
$s= str_repeat ( '1', 300 ); //产生由256个1组成的字符串
$m= memory_get_usage ( ); //获取当前占用内存
$p=& $s;
$s= null;
$mm= memory_get_usage ( ); //unset()后再查看当前占用内存
echo "{$m}\n";
echo "{$mm}\n";
echo $m- $mm;
echo "\n";
 
 
        打印的结果如下:
小于等于 256时, unset:
113504
113224
280
小于等于 256时,null:
113776
113496
280
大于 256时, unset:
113776
113360
416
大于 256时,null:
113776
113496
280
大于 256时,引用后, unset:
113816
113816
0
大于 256时,引用后, unset两次:
114272
113360
912
大于 256时,引用后,null:
113816
113592
224
 
        得到的结论:
    1. null和unset都可以释放内存。
    2. 变量大小不超过256时,使用null和unset释放的内存大小相同。
    3. 变量大小超过256时,使用unset释放的内存比null要多。
    4. 变量被引用时,使用unset无法释放内存,直到所有引用都被释放。
    5. 变量被引用时,使用null可以强制释放内存。
 
        以上结论需要通过查看源代码来认证。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值