Php 为什么get_memory_usage会保留内存?

Php 为什么get_memory_usage会保留内存?,php,php-internals,Php,Php Internals,如果我在我的计算机上运行以下PHP程序 echo memory_get_usage(); echo "|"; echo memory_get_usage(); echo "|"; echo memory_get_usage(); 我得到输出 635048|635080|635080 由此看来,对memory\u get\u usage的初始调用似乎保留了32KB的内存。我在没有echo语句的情况下尝试了这个 echo memory_get_usage(); echo memory_get_u

如果我在我的计算机上运行以下PHP程序

echo memory_get_usage();
echo "|";
echo memory_get_usage();
echo "|";
echo memory_get_usage();
我得到输出

635048|635080|635080
由此看来,对
memory\u get\u usage
的初始调用似乎保留了32KB的内存。我在没有
echo
语句的情况下尝试了这个

echo memory_get_usage();
echo memory_get_usage();
echo memory_get_usage();
得到了类似的结果

634504634536634536
//broken out 634504, 634536, 634536
虽然删除
echo
语句减少了脚本的总体内存使用量,但在最初调用
memory\u get\u usage
后仍保留了32KB的内存。为什么会这样

我已经在多台计算机上试过了,虽然实际数字不同,但差距仍然相同

如果我看一下(我认为是什么)这个函数的来源

//File: php-5.3.19/ext/standard/var.c
PHP_FUNCTION(memory_get_usage) {
    zend_bool real_usage = 0;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &real_usage) == FAILURE) {
        RETURN_FALSE;
    }

    RETURN_LONG(zend_memory_usage(real_usage TSRMLS_CC));
}
我看不到有任何东西必然会说“在内存中保留这个变量”。然而,我已经好几年没有认真写过C了,我也从来没有对PHP源代码进行过专业的黑客攻击,我跟踪执行的能力是零


所以,我的问题是,是什么保留了32KB的内存,这在PHP源代码中发生了什么,和/或如何从
内存获取使用情况
入口点跟踪它。

这可能是必须创建输出的结果。可能涉及到一些输出缓冲

在命令提示下:

[charles@lobotomy /tmp]$ php --version
PHP 5.4.9 (cli) (built: Nov 22 2012 12:59:04)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.0rc1, Copyright (c) 2002-2012, by Derick Rethans
[charles@lobotomy /tmp]$ cat test.php
<?php
#echo '|';
echo memory_get_usage();
echo '|';
echo memory_get_usage();
echo '|';
echo memory_get_usage();
echo '|';

[charles@lobotomy /tmp]$ php test.php
227024|227056|227056|
[charles@lobotomy/tmp]$php--version
PHP 5.4.9(cli)(构建时间:2012年11月22日12:59:04)
版权所有(c)1997-2012 PHP集团
Zend Engine v2.4.0版权所有(c)1998-2012 Zend Technologies
Xdebug v2.2.0rc1版权所有(c)2002-2012,作者:德里克·雷特汉斯
[charles@lobotomy/tmp]$cat test.php

这可能是必须创建输出的结果。可能涉及到一些输出缓冲

在命令提示下:

[charles@lobotomy /tmp]$ php --version
PHP 5.4.9 (cli) (built: Nov 22 2012 12:59:04)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.0rc1, Copyright (c) 2002-2012, by Derick Rethans
[charles@lobotomy /tmp]$ cat test.php
<?php
#echo '|';
echo memory_get_usage();
echo '|';
echo memory_get_usage();
echo '|';
echo memory_get_usage();
echo '|';

[charles@lobotomy /tmp]$ php test.php
227024|227056|227056|
[charles@lobotomy/tmp]$php--version
PHP 5.4.9(cli)(构建时间:2012年11月22日12:59:04)
版权所有(c)1997-2012 PHP集团
Zend Engine v2.4.0版权所有(c)1998-2012 Zend Technologies
Xdebug v2.2.0rc1版权所有(c)2002-2012,作者:德里克·雷特汉斯
[charles@lobotomy/tmp]$cat test.php

可能是初始输出缓冲?如果你在第一次测量之前回应了什么,会发生什么?那就是@Charles-如果你愿意,回答下面的问题,我会投票/接受。可能是初始输出缓冲?如果你在第一次测量之前回应了什么,会发生什么?这就是@Charles-如果你愿意,请回答下面的问题,我将投票/接受。