3

例如:

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

显然这是行不通的,因为它在传递给lol$v之前就被破坏了。c()但我想以某种方式让c()修改相同的文本。就像使用参考一样。(我尝试了引用,但它们实际上增加了内存使用量,可能是因为 PHP 制作了更多副本)

4

1 回答 1

1

是的,你是对的,PHP 使用写时复制的方法。您可能想尝试参考,例如:

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

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

于 2013-03-27T13:36:54.243 回答