unset 和 = null 之间的区别

2023-12-06

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(使用前将#替换为@)

unset 和 = null 之间的区别 的相关文章

随机推荐