如何在传递大变量时减少内存使用


How to decrease memory usage when passing big variables around

例如:

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;
}

使用了~ 23mb,我认为这是因为PHP在每次修改时都会创建该文本的副本。如果我只打印一次文本,它将占用12mb。

在调用函数之前,我能以某种方式释放原始变量的内存吗?像

unset($v);
$v = c($v);

显然这是行不通的,因为$v在传递给c()之前就被破坏了。但我想以某种方式让c()修改相同的文本。比如使用推荐信。(我尝试过引用,但它们实际上增加了内存使用,可能是因为PHP生成了更多的副本)

是的,你是对的,PHP使用写时复制的方法。你可以尝试引用,例如:

function a(&$v){
    $v[1] = 'x';      
    $v = b($v);
    return $v;
}

我刚刚注意到,你尝试了引用,你确定内存使用率没有降低吗?