如果我在我的计算机上运行以下 PHP 程序
echo memory_get_usage();
echo "|";
echo memory_get_usage();
echo "|";
echo memory_get_usage();
我得到输出
635048|635080|635080
由此看来,最初的调用似乎memory_get_usage
是保留 32KB 的内存。echo
我在没有声明的情况下尝试了这个
echo memory_get_usage();
echo memory_get_usage();
echo memory_get_usage();
并得到了类似的结果
634504634536634536
//broken out 634504, 634536, 634536
虽然删除echo
语句减少了脚本的整体内存使用量,但在初始调用memory_get_usage
. 为什么是这样?
我已经在多台计算机上尝试过,虽然实际数字不同,但差距保持不变。
如果我看一下(我认为是)这个函数的来源
//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 源代码中发生在哪里和/或我如何从memory_get_usage
入口点跟踪它。