gpt4 book ai didi

php - unset 和 = null 的区别

转载 作者:IT王子 更新时间:2023-10-29 00:48:28 24 4
gpt4 key购买 nike

来自random php.net post :

If you are doing $whatever = null; then you are rewriting variable's data. You might get memory freed / shrunk faster, but it may steal CPU cycles from the code that truly needs them sooner, resulting in a longer overall execution time.

显然这是 undisputed truth所以也许有人会好心解释一下。

我的意思是,unset 神奇地不执行任何汇编指令,而 $whatever = null; 执行什么?给出的答案和说的一样有用

$whatever = null resets the buffer and the L1 cache whereas unset clears the buffer and resets the L2 cache.

Techno mumbo jumbo 不构成答案。

最佳答案

这两种方法之间的一个重要区别是 unset($a) 还会从符号表中删除 $a;例如:

$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);

输出:

Notice: Undefined variable: a in xxx
NULL

但是当使用$a = null时:

$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);

输出:

NULL

我也通过基准测试运行了代码,发现 $a = null 比对应的 unset() 快大约 6%。似乎更新符号表条目比删除它更快。

附录

另一个区别(如这个小脚本所示)似乎是每次调用后恢复了多少内存:

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 字节的差异,但它仍然存在差异。

关于php - unset 和 = null 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com