当PHP函数结束时,内存是否被释放?

3

我正在编写一些处理大量数据的 PHP 脚本,但是需要在函数内逐个处理数据块。就像这样:

function part1(){
  $data = getLargeArray();
  $evenBigger = array();
  foreach($data as $piece){
    $evenBigger[$piece['part1']][$piece['part2']][] = ohGodMoreData();
  }

  //...manipulate $evenBigger more and more

  return true;
}

part1();

part2();
//...etc

我关心我的函数的内存使用情况。 虽然它们并不是非常繁重,但我担心如果内存没有被释放,那么它可能会变得很繁重。 我知道php会在每个脚本结束时释放所有内存,但我也不想运行4或5个不同的脚本。
当我转到part2();时,part1();的内存是否被释放?
我应该手动取消设置占用大量空间的变量,例如$data$evenBigger,还是相信php在函数结束时会为我完成这项工作?
或者:
-有更好的方法释放内存吗?
-有任何方法测试这样的事情吗?
-有更好的资源管理技巧吗?

1
memory_get_usage()使用它,你就可以回答自己的问题。 - user557846
2
内存并没有被“释放”,但是仅在函数范围内的变量所使用的内存会在函数返回或退出时为“垃圾回收”所使用,并且“垃圾回收”将在有空闲时间时释放内存...通常这个过程会非常快速。 - Mark Baker
1
您可以在函数内手动unset变量,但这只是使它们可供垃圾回收使用。 - Mark Baker
1个回答

0

PHP不需要您取消设置所有变量。

在这里,您的$evenBigger变量具有局部作用域,除非您将其分配给代码中的某个外部引用,否则您无需在函数执行后处理它。

请注意,我不知道PHP的内部行为,也无法确定何时进行垃圾回收。关于此的文档似乎很好 http://www.php.net/manual/en/features.gc.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接