时间:2021-07-01 10:21:17 帮助过:5人阅读
$m1 = memory_get_usage();
var_dump($m1);
$arr = array_fill(0, 100000, 'phpinfo');
unset($arr);
$m2 = memory_get_usage();
var_dump($m2);
var_dump("消耗内存:".($m2-$m1)/1000);
输出结果为:string(21) "消耗内存:64.688";
我很不解,我已经对大数组使用unset了,这占用的64.688K内存是从哪跑出来的,求解
$m1 = memory_get_usage();
var_dump($m1);
$arr = array_fill(0, 100000, 'phpinfo');
unset($arr);
$m2 = memory_get_usage();
var_dump($m2);
var_dump("消耗内存:".($m2-$m1)/1000);
输出结果为:string(21) "消耗内存:64.688";
我很不解,我已经对大数组使用unset了,这占用的64.688K内存是从哪跑出来的,求解
<<深入理解PHP内存管理之谁动了我的内存>>
http://www.laruence.com/2011/03/04/1894.html
PHP并不是简单的向OS要内存, 而是会像OS要一个大块的内存, 然后把其中的一块分配给申请者, 这样当再有逻辑来申请内存的时候,
就不再需要向OS申请内存了, 避免了频繁的系统调用.在我们调用
efree
释放内存的时候, PHP也不会把内存还给OS, 而会把这块内存, 归入自己维护的空闲内存列表. 而对于小块内存来说,
更可能的是, 把它放到内存缓存列表中去(后记, 某些版本的PHP, 比如我验证过的PHP5.2.4, 5.2.6, 5.2.8,
在调用get_memory_usage()
的时候, 不会减去内存缓存列表中的可用内存块大小, 导致看起来,unset
以后内存不变