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

标签 php variables memory

例如:

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/

相关文章:

php - 添加类以在 Laravel 上选择元素

php - Laravel Carbon 获取尾随数据错误

ios - 有没有办法在 swift 中自定义变量命名的声明?

php - for循环中的动态变量名

c - 应该将任何 C 文件作为二进制文件打开

sql - PostgreSQL CREATE TABLE AS 命令创建一个 OUT OF MEMORY 错误

c# - 有人可以发送 ReadInt32 来写入进程内存吗?

php - 制作一个可以 self 更新并在企业级别保护它的 PHP 应用程序

javascript - 在 Laravel 中发布到数组错误

java - 为什么我得到空数组?