例如:
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 制作了更多副本)
最佳答案
是的,您是对的,PHP 使用写时复制方法。您可能想尝试引用,例如:
function a(&$v){
$v[1] = 'x';
$v = b($v);
return $v;
}
我刚刚注意到,您尝试了引用,您确定内存使用量没有降低吗?
关于php - 传递大变量时如何减少内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660092/