据说PHP使用copy-on-write进程。如果我运行这些代码,我就会徘徊:
$first = 5;
$second = $first;
$first = 5;
然后是否为 $ first 分配新的内存空间?非常感谢
答案 0 :(得分:1)
运行此脚本两次。 第一次:
echo "<pre>";
$first = 5;
echo memory_get_usage() . "\n";
$second = $first;
echo memory_get_usage() . "\n";
$first = 5;
echo memory_get_usage() . "\n";
结果:
333224
333280
333312
第二次 - 只评论一行
echo "<pre>";
$first = 5;
echo memory_get_usage() . "\n";
//$second = $first;
echo memory_get_usage() . "\n";
$first = 5;
echo memory_get_usage() . "\n";
结果:
333112
333112
333112
回答:是的,它会分配新内存
答案 1 :(得分:0)
语义是&#34; copy-on-write&#34; NOT&#34; copy-on-write-only-the-value-has-changed&#34;。
一旦声明,就会创建一些$秒的空间。该变量存在所需的最小空间。此时,空间不会分配给$ first所具有的值。所以写在这里的副本在这里工作;没有写入,因此没有为分配给$ first的值分配额外空间,现在将其分配给$ second。
然后,在您将其他内容分配给$ first时,会将更多空间分配给$ second。此时创建空间以将原始值的副本保存在$ first
中<?php
echo "<pre>";
// 10 sets == 100 chars
$first = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
echo memory_get_usage() . "\n";
$second = $first;
echo memory_get_usage() . "\n";
$first = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
echo memory_get_usage() . "\n";
$first = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
echo memory_get_usage() . "\n";
输出
241496
241584
241752
241752