我们知道 file_get_contents 函数是将文件内容读取到内存的,那就以这个为例。
查看文件大小
ll -lh apache-jmeter-4.0.zip
50M
<?php
$file = "apache-jmeter-4.0.zip";
$mem_start = memory_get_usage();
reader($file);
$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;
function reader($file){
file_get_contents($file);
}
?>
使用内存:0MB
函数内部申请的内存是局部作用域的,一旦程序离开这个作用域,PHP就会去回收所有内存(让然依然会遵循引用计数的原则)。
<?php
$file = "apache-jmeter-4.0.zip";
$mem_start = memory_get_usage();
file_get_contents($file);
$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;
?>
使用内存:0MB
没有变量接收返回值,也就不需要开辟新的内存,那么调用了file_get_contents难道就不消耗内存吗?
肯定要消耗的,只是在file_get_contents内部会申请内存,函数执行完内部变量自然会被回收了。
<?php
$file = "apache-jmeter-4.0.zip";
$mem_start = memory_get_usage();
$info = file_get_contents($file);
$mem_end = memory_get_usage();
echo '使用内存:'.round(($mem_end - $mem_start)/1024/1024, 2).'MB'.PHP_EOL;
?>
使用内存:49.19MB
所以在使用memory_get_usage的时候还是要注意以上的情况。