我正在尝试获取PHP变量的真实大小(内存使用量)。我知道没有直接的方法可以实现这一点,但有一个简单的“hack”方法,可以使用memory_get_usage()。
<?php
function varSize()
{
$s = memory_get_usage();
$x = true;
echo memory_get_usage() - $s;
}
varSize();
echo '<br>';
$s = memory_get_usage();
$x = true;
echo memory_get_usage() - $s;
echo '<br>';
$s = memory_get_usage();
$x = unserialize(serialize(true));
echo memory_get_usage() - $s;
?>
这段代码分别返回64、160、0。为什么会这样呢?前两个变量几乎完全一样! 为什么会出现这种情况,如何获得真正的变量大小?
memory_get_usage
不会报告每个变量或类似变量的内存使用情况,而是报告已(解)分配的内存“块”的使用情况。例如,如果PHP从0.5MB开始,然后执行一些操作并决定需要1MB的额外内存,则您只能测量从0.5MB到1.5MB的更改,因为它测量的是内存分配情况。这与每个变量的内存使用情况相反。由于分配内存不是免费的,并且它试图将分配调用保持在合理的最小值,因此它几乎总是会分配比当前需要更多的内存。 - birdspider