PHPのメモリの使い方
unset()をしているが、メモリの消費量は変化しない。
えぇぇぇ!ということで調べてみた。
<?php $memory_usage = memory_get_usage(); $arr = range(1,10000); echo memory_get_usage() - $memory_usage . "\n"; // 785888 unset($arr); echo memory_get_usage() - $memory_usage . "\n"; // 65072 ?>
ちゃんと開放されてます。つか、オーバーヘッドひどいな。
<?php $memory_usage = memory_get_usage(); $arr = range(1,10000); echo memory_get_usage() - $memory_usage . "\n"; // 785896 $arr2 =& $arr; echo memory_get_usage() - $memory_usage . "\n"; // 786056 unset($arr); echo memory_get_usage() - $memory_usage . "\n"; // 786056 ?>
たぶん開放されない?と思ってるのはこれのせいじゃないのでしょうか。
リファレンスとは?
>>リファレンスは、Unix ファイルシステムの ハードリンクのようなものであると考えられます。<<
<?php $memory_usage = memory_get_usage(); $arr = range(1,10000); echo memory_get_usage() - $memory_usage . "\n"; // 785896 $arr2 =& $arr; echo memory_get_usage() - $memory_usage . "\n"; // 786056 $arr = null; echo memory_get_usage() - $memory_usage . "\n"; // 65200 ?>
nullっちゃうとかどうでしょう。
ついでに。
<?php $memory_usage = memory_get_usage(); $arr = range(1,10000); echo memory_get_usage() - $memory_usage . "\n"; // 785896 $arr2 = $arr; echo memory_get_usage() - $memory_usage . "\n"; // 786032 count($arr2); echo memory_get_usage() - $memory_usage . "\n"; // 786032 next($arr2); echo memory_get_usage() - $memory_usage . "\n"; // 1331624 ?>
代入した段階ではメモリ確保されないだっけ?
マニュアル見つけられず。