gpt4 book ai didi

php - 为什么 is_array() 在 PHP 中会泄漏内存?

转载 作者:可可西里 更新时间:2023-11-01 12:37:20 25 4
gpt4 key购买 nike

根据我的 xdebug 输出,is_array() 泄漏了作为参数传递给它的内存量。如果我向它传递一个大数组,它会泄漏大量内存,只是为了检查它是否是一个数组。

有解决办法吗?

   17.4313   21858520   +70004                   -> is_array() [...]/app/app_model.php:526

这是导致泄漏的代码片段:

        $ret = $this->behaviors[$b[$i]]->afterFind($this, $results, true);
if (is_array($ret)) {
$results = $ret;
}

我在 Linux (Ubuntu 9.04) 上运行这个

PHP:5.3.2

调试:2.0.5

uname -a 给我这个:

Linux linux8 2.6.28-19-server #64-Ubuntu SMP Wed Aug 18 21:57:33 UTC 2010 i686 GNU/Linux

最佳答案

我的第一 react :

Select isn't broken .

我的第二 react :

你可以总结出三件事:

  • 一个广泛传播的软件 (is_array) 坏了 - 你是第一个注意到的人
  • xdebug 坏了报告泄漏,而实际上没有泄漏
  • xdebug 和 PHP 不能很好地协同工作,因为它涉及内存管理

广泛传播和使用的功能通常不是问题。尝试通过运行更简单的代码来缩小“xdebug 泄漏报告”的出现范围:

$arr = array_fill( 0, 10000, "content" );
$mallocbytes=true;// set to true to get process
$usage=memory_get_usage(!$mallocbytes);
for( $i=0; $i!=1000000; $i=$i+1) {
is_array($arr);
$newusage=memory_get_usage(!$mallocbytes);
if( $newusage != $usage ) {
print( "diff after $i'th is_array: ".($newusage-$usage)."\n" );
}
$usage=$newusage;
}

查看 PHP 运行时的实际内存消耗。我打赌它不会增长。

关于php - 为什么 is_array() 在 PHP 中会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com