谁能解释5.6.19的行为。 是以下代码:
<?php
function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function example()
{
$a = [];
$k = 0;
while($k <= 100000)
{
$a[$k] = mt_rand();
//$a[$k] = trim(mt_rand());
$k++;
//unset($a);
}
//mt_rand();
//trim('');
//$mem = memory_get_usage(true);
//echo $mem.' '.convert($mem).PHP_EOL;
unset($a);
trim('');
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem).PHP_EOL;
}
example();
example();
example();
example();
example();
echo PHP_EOL;
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem);
我们称之为功能&#34;示例&#34;是5次。它生成一个包含100,000个元素的数组。 在生成数组之后,在&#34; unset&#34;之前,我们调用trim。 记忆表现:
786432 768 kb
786432 768 kb
1048576 1 mb
1310720 1.25 mb
1572864 1.5 mb
1572864 1.5 mb
生成数组后,在&#34; unset&#34;之前,我们调用mt_rand。 记忆表现:
786432 768 kb
1048576 1 mb
1310720 1.25 mb
1310720 1.25 mb
1310720 1.25 mb
1048576 1 mb
在生成数组之后,在&#34; unset&#34;之前,我们调用&#34; mt_rand&#34;,并包装&#34; mt_rand&#34;的数组值。 in&#34; trim&#34;。 记忆表现:
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
生成数组后,在&#34; unset&#34;之前,我们调用memory_get_usage。 记忆表现:
786432 768 kb
1048576 1 mb
1310720 1.25 mb
1572864 1.5 mb
1572864 1.5 mb
1572864 1.5 mb
生成数组后,在&#34; unset&#34;之前,我们不会调用任何内容。 记忆表现:
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
代码运行于:
$ php5 -v
PHP 5.6.19-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with blackfire v1.10.0, https://blackfire.io, by Blackfireio Inc.
P.S
当你为数组的值添加一个强制转换(字符串)时,我们得到:
1310720 1.25 mb
1310720 1.25 mb
1572864 1.5 mb
1835008 1.75 mb
1835008 1.75 mb
1835008 1.75 mb
示例代码:
<?php
function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function example()
{
$a = [];
$k = 0;
while($k <= 100000)
{
$a[$k] = (string)mt_rand();
$k++;
}
unset($a);
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem).PHP_EOL;
}
example();
example();
example();
example();
example();
echo PHP_EOL;
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem);
while(true)
{
sleep(10);
}
当你将一个cast(int)添加到数组的值时,我们得到:
786432 768 kb
1048576 1 mb
1310720 1.25 mb
1572864 1.5 mb
1572864 1.5 mb
1572864 1.5 mb
示例代码:
<?php
function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function example()
{
$a = [];
$k = 0;
while($k <= 100000)
{
$a[$k] = (int)mt_rand();
$k++;
}
unset($a);
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem).PHP_EOL;
}
example();
example();
example();
example();
example();
echo PHP_EOL;
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem);
while(true)
{
sleep(10);
}
P.S.S
至于我,这是由于变量及其类型。 另一个例子:
<?php
function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function example()
{
$a = [];
for($k = 0; $k<=100000; $k++)
{
$b = mt_rand();
$a[$k] = (string)$b;
//unset($b);
}
unset($a);
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem).PHP_EOL;
}
for($a = 0; $a<=5; $a++)
{
example();
}
echo PHP_EOL;
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem);
while(true)
{
sleep(10);
}
性能:
1310720 1.25 mb
1835008 1.75 mb
1572864 1.5 mb
1835008 1.75 mb
1835008 1.75 mb
2097152 2 mb
1835008 1.75 mb (If the code is run more than ~200 times - the maximum memory usage 12.75MB)
但是如果我删除变量&#34; $ b&#34;
<?php
function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function example()
{
$a = [];
for($k = 0; $k<=100000; $k++)
{
$b = mt_rand();
$a[$k] = (string)$b;
unset($b);
}
unset($a);
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem).PHP_EOL;
}
for($a = 0; $a<=5; $a++)
{
example();
}
echo PHP_EOL;
$mem = memory_get_usage(true);
echo $mem.' '.convert($mem);
while(true)
{
sleep(10);
}
结果:
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
524288 512 kb
P.S.S.S
在php7中 - 一切正常。