我有一个奇怪的问题,我在PHP中运行memory_get_usage函数。我在str_repeats之后运行它们。我总是希望每次内存使用的值都更多。但是,每次都会发生较少的事情。这怎么可能呢?
<?php
while(true) {
$num1 = rand(1,1000000);
$string1 = str_repeat(' ',$num1);
$memoryUsed1 = memory_get_peak_usage(false);
$memoryAllcoated1 = memory_get_peak_usage(true);
$memoryUsed2 = memory_get_usage(false);
$memoryAllcoated2 = memory_get_usage(true);
$num2 = rand(1,1000000);
$string2 = str_repeat(' ',$num2);
$memoryUsed3 = memory_get_peak_usage(false);
$memoryAllcoated3 = memory_get_peak_usage(true);
$memoryUsed4 = memory_get_usage(false);
$memoryAllcoated4 = memory_get_usage(true);
$num3 = rand(1,1000000);
$string3 = str_repeat(' ',$num3);
$memoryUsed5 = memory_get_peak_usage(false);
$memoryAllcoated5 = memory_get_peak_usage(true);
$memoryUsed6 = memory_get_usage(false);
$memoryAllcoated6 = memory_get_usage(true);
}
?>
$memoryUsed2 = 9200808
$memoryAllocated2 = 9961472
$memoryUsed4 = 7960528
$memoryAllocated4 = 8912896
$memoryUsed6 = 6230648
$memoryAllocated6 = 7077888
$num1 = 921888
$num2 = 465006
$num3 = 92134
因此字符串重复得更少。它是从函数的最后一点测量内存吗?任何人都可以解开这个谜团吗?
PS。我使用调试器来获取这些值,这可能不可靠吗?
答案 0 :(得分:0)
如果while
内的代码单独运行,则无法生成三个连续递减的memory_get_usage
读数。
但是,在每个迭代用三个随机大小值覆盖三个变量的循环中,您可以得到一个与先前传递相比变小的情况,从而减少内存使用量。
考虑一下:
$multipliers = [
[10000000, 10000000, 10000000],
[1000, 1000, 1000],
];
foreach($multipliers as $numbers) {
foreach($numbers as $k=>$v) {
$s[$k] = str_repeat(" ", $v);
$m[$k] = memory_get_usage(true);
}
print_r($m);
}
并注意第二遍中的结果:
Array
(
[0] => 10485760
[1] => 20709376
[2] => 30932992
)
Array
(
[0] => 20709376
[1] => 10485760
[2] => 262144
)