gpt4 book ai didi

php - 通过引用保存值时的内存使用情况

转载 作者:行者123 更新时间:2023-12-04 06:18:38 48 4
gpt4 key购买 nike

$myStr = '';
for ($i = 0; $i<999500; $i++) {
$myStr .= chr(rand(0,127));
}
echo round(memory_get_usage()/1024/1024,2) . ' Mb';

我有 1.27 Mb
$myStr = '';
for ($i = 0; $i<999500; $i++) {
$myStr .= chr(rand(0,127));
}
$myStr2 = &$myStr;
echo round(memory_get_usage()/1024/1024,2) . ' Mb';

我将 myStr 保存到 myStr2 引用,和 我有 1.27 Mb
$myStr = '';
for ($i = 0; $i<999500; $i++) {
$myStr .= chr(rand(0,127));
}
$myStr2 = $myStr;
echo round(memory_get_usage()/1024/1024,2) . ' Mb';

$myStr2 = $myStr 也是 我有 1.27 Mb .这是怎么回事?为什么我得到 1.27 Mb,而不是 2.54 Mb?

最佳答案

通过在 PHP 中将一个变量分配给另一个变量,PHP 不会出于内存优化的原因立即复制该变量的数据。

只有在您实际更改两个变量之一时,PHP 才会复制数据,然后仅更改两个变量之一的数据:

$myStr2 = $myStr; # this won't copy the data.
$myStr2 .= 'X'; # this will trigger copy on write.

这种优化称为“写时复制”( Wikipedia )。

如果您想获得有关该主题的完整科学阅读,请参阅:
  • Copy-on-Write in the PHP Language (Jan 18 2009; by Akihiko Tozawa, Michiaki Tatsubori, Tamiya Onodera and Yasuhiko Minamide; PDF file)
  • 关于php - 通过引用保存值时的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889000/

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