例如:
a(wordwrap(str_repeat('abcdef', 500000), 160, "\n", true));
function a($v){
$v[1] = 'x';
$v = b($v);
return $v;
}
function b($v){
$v[2] = 'x';
$v = c($v);
return $v;
}
function c($v){
$v[3] = 'x';
d($v);
}
function d($v){
$v[4] = 'x';
print $v;
}
这使用~23 MB。我认为因为PHP在每次修改时都会创建该文本的副本。 如果我只使用12 MB打印文本。
在调用函数之前,我可以以某种方式释放原始变量的内存吗?像
unset($v);
$v = c($v);
显然这不起作用,因为$v
在传递给c()
之前被销毁了。但是我想以某种方式让c()
修改相同的文本。喜欢使用引用。 (我尝试过引用,但它们实际上增加了内存使用量,可能是因为PHP生成了更多的副本)
答案 0 :(得分:1)
是的,你是对的,PHP使用copy-on-write方法。您可能想尝试参考,例如:
function a(&$v){
$v[1] = 'x';
$v = b($v);
return $v;
}
我刚注意到,你尝试过引用,你确定内存使用量不低吗?