From a 随机 php.net 帖子:
如果你正在做 $whatever = null;那么你正在重写变量的
数据。您可能会更快地释放/缩小内存,但它可能会窃取 CPU
更快地从真正需要它们的代码中循环,从而产生
整体执行时间更长。
显然这是无可争议的事实所以也许有人会好心地解释一下。
我的意思是,什么?unset
神奇地不执行任何汇编指令,而$whatever = null;
做?给出的答案与说一样有用
$whatever = null 重置缓冲区和 L1 缓存,而 unset 则清除缓冲区并重置 L2 缓存。
技术上的胡言乱语并不构成答案。
两种方法之间的一个重要区别是unset($a)
还删除$a
从符号表;例如:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Outputs:
Notice: Undefined variable: a in xxx
NULL
但当$a = null
用来:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
我还通过基准测试运行了代码,发现$a = null
比它快大约 6%unset()
对方。似乎更新符号表条目比删除它更快。
Addendum
另一个区别(如这个小脚本中所示)似乎是每次调用后恢复了多少内存:
echo memory_get_usage(), PHP_EOL;
$a = str_repeat('hello world ', 100);
echo memory_get_usage(), PHP_EOL;
// EITHER unset($a); OR $a = null;
echo memory_get_usage(), PHP_EOL;
使用时unset()
除了 64 字节之外的所有内存都被返还,而$a = null;
释放除 272 字节以外的所有内存。我没有足够的知识来知道为什么两种方法之间有 208 字节的差异,但它仍然是一个差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)