我试图弄清楚这一点:如果get_memory_usage()打印内存,当这个函数被调用时,由脚本使用,那么每次这个内存计数应该总是增加或不应该改变(实际上,当我在代码的某些行之后多次尝试获得这种使用时,就会发生这种情况)。我注意到get_memory_peak_usage()大于get_memory_usage()的上一个结果,如果get_memory_usage()修复了已经使用的内存,那么这个值不能减小,这怎么可能呢?
脚本:
echo "\n" . 'Used: '.memory_get_usage().' bytes';
$array = array("1" => "value", "foo" => "bar",);
echo "\n" . 'Used: '.memory_get_usage().' bytes';
echo "\n" . 'Peak: '.memory_get_peak_usage().' bytes';发布于 2021-02-26 19:01:30
PHP具有动态内存管理功能,可以释放不再需要的内存。当前所需的内存(get_memory_usage())在执行脚本的过程中会发生变化。get_memory_peak_usage()总是获得所需的最大内存。
因此,get_memory_peak_usage()总是大于get_memory_usage()。
PHP语句、函数、类等也使用内存。必须使用足够大的数组来演示内存管理是如何工作的。
让我们看一下下面的代码:
function printMemUse(string $comment){
printf('%s : %dk/%dk<br>',
$comment,
memory_get_usage()/1024,
memory_get_peak_usage()/1024
);
}
function proc1(){
$arr = array_fill(0,6000,'a string');
return $arr[2000];
}
printMemUse('start');
$arr = array_fill(0,6000,'a string');
printMemUse('first array filled');
proc1();
printMemUse('after function called');
$arr2 = array_fill(0,6000,'a string');
printMemUse('secondarray2 filled');
$arr = null;
printMemUse('first arr set null');
$arr2 = null;
printMemUse('arr2 set null');输出:
start : 376k/413k
first array filled : 637k/637k
after function called : 637k/897k
secondarray2 filled : 897k/897k
first arr set null : 637k/897k
arr2 set null : 377k/897k第一个值是memory_get_usage() as kByte,第二个值是memory_get_peak_usage() kByte。
函数中的变量在结束后再次释放。我们只是看到了一个新的最大值(在调用函数之后)。该内存随后由第二个数组使用。最大值不会增加。分配NULL后,也不再需要数组的内存。
在PHP sandbox中自己尝试一下。
https://stackoverflow.com/questions/66141731
复制相似问题