例えば:
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は、変更のたびにそのテキストのコピーを作成しているからだと思います。12 MBを使用したら、テキストを印刷するだけです。
関数が呼び出される前に、どういうわけか元の変数のメモリを解放できますか?好き
unset($v);
$v = c($v);
明らかに、これはlol$v
に渡される前に破棄されるため、機能しません。しかし、どういうわけか同じテキストを変更c()
させたいと思います。c()
参照を使用するように。(私は参照を試しましたが、おそらくPHPがより多くのコピーを作成するため、実際にはメモリ使用量が増加します)