我试图比较内存中使用的常量和变量,但发现了一个奇怪的现象。
测试代码:
<?php
var_dump( memory_get_usage() ); // int(129100)
// I don't understand: I don't do someting but why there has the changed
var_dump( memory_get_usage() ); // int(129156)
var_dump( memory_get_usage() ); // int(129156)
define('hello', 'WORLD');
// why here hasn't changed
var_dump( memory_get_usage() ); // int(129156)
$hello = 'WORLD';
var_dump( memory_get_usage() ); // int(129304)
?>
答案 0 :(得分:2)
你并没有做任何事情。 var_dump
调用可能是在初始化某些内容或留下一些东西。
在https://github.com/php/php-src/blob/master/ext/standard/var.c
上查看php_var_dump
答案 1 :(得分:2)
首先:PHP有很多内存泄漏。这意味着,它确实在某处分配内存,但不释放它。所以不要害怕看到这样的影响。但这次可能还有别的东西:
看看这个例子:
<?php
$data = array(0,0,0,0);
$data[0] = memory_get_usage();
$data[1] = memory_get_usage();
echo $data[0];
echo "\n";
echo $data[1];
echo "\n";
$data[2] = memory_get_usage();
echo $data[2];
echo "\n";
$data[3] = memory_get_usage();
echo $data[3];
echo "\n";
?>
输出将如下:
626464
626464
626528
626528
你看到它在第一次调用“echo”后发生了变化,它必须为输出缓冲区分配内存或类似的东西。也许它在内部使用printf(buffer,“...”,...)来生成发送到标准输出的字符串。此字符串在以后的调用中重用,并在需要时调整为更长的缓冲区。
您对var_dump的调用间接使用了echo函数,并且可能还使用了一些内部缓冲区,这是第一次调用时分配的。
解决方案:为了更准确地测量事物,您应该在“测量”之前调用每个输出函数一次,或者在结果的最终输出之前不要调用它们。