素材牛VIP会员
PHP偷了我的内存
 馒***火  分类:SQL代码  人气:1051  回帖:1  发布于6年前 收藏
$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内存是从哪跑出来的,求解

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv6 码匠
好***下 职业无 6年前#1

<<深入理解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以后内存不变

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取