PHP - memory_get_usage()的奇怪行为

时间:2015-08-26 09:59:11

标签: php memory

我试图在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。到底为什么? 两个第一个变体是彼此的绝对复制粘贴! 为什么会发生这种情况以及如何获得真正的可变大小?

1 个答案:

答案 0 :(得分:0)

我刚才在互联网搜索中发现了这些功能,并在我的脚本中使用它们(对不起原作者,丢失链接给你这里的功劳)。您可以在代码中包含这些函数,以使模块更易于阅读,然后在需要时调用memoryusage函数,例如......

// This function converts the number of bytes sent to it to kb, mb, gb, tb, pb as appropriate based on the size of memory (powers of 1024)
function convert($size)
{
    $unit=array('b','kb','mb','gb','tb','pb');
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}

// This function gets current PHP memory use and returns an approximate (rounded) figure back in: bytes, kb, mb, gb, tb, or pb as appropriate
function memoryusage() {
    return convert(memory_get_usage(true));
}

....

// This is me wanting to know how much memory is being used at this point of the script
$memuse = memoryusage();

...
相关问题