memory_get_usage
memory_get_usage ― PHP に割り当てられたメモリの量を返す
PHP: memory_get_usage - Manual
最近この関数の存在を知った。今までは ps や top コマンドでメモリの使用量を見ていたのだけど、これがあればもう少し細かく見れそう。
サンプル
ソース
<?php $mem1 = 0; $mem2 = memory_get_usage(); $diff = $mem2 - $mem1; echo "start\t{$mem2}\t{$diff}\n"; // 1M 個の配列を作る $array1M = array_fill(0, 1024 * 1024, 'a'); $mem1 = $mem2; $mem2 = memory_get_usage(); $diff = $mem2 - $mem1; echo "make array\t{$mem2}\t{$diff}\n"; // 1M 文字の文字列 $str1M = implode('', $array1M); $mem1 = $mem2; $mem2 = memory_get_usage(); $diff = $mem2 - $mem1; echo "make str\t{$mem2}\t{$diff}\n"; unset($array1M); $mem1 = $mem2; $mem2 = memory_get_usage(); $diff = $mem2 - $mem1; echo "unset array\t{$mem2}\t{$diff}\n"; unset($str1M); $mem1 = $mem2; $mem2 = memory_get_usage(); $diff = $mem2 - $mem1; echo "unset str\t{$mem2}\t{$diff}\n"; echo "peak\t", memory_get_peak_usage(), "\n";
出力
start 324664 324664 make array 67434044 67109380 make str 68482836 1048792 unset array 1373664 -67109172 unset str 324872 -1048792 peak 68483728
感想
- 1M 個の配列を作った場合のメモリの増加量は約 67M バイト。
- 配列 1 要素あたり約 67 バイト。
- ブロック単位でメモリを確保するだろうから、実際の 1 要素あたりのメモリ使用量は目安レベルか。
- 配列 1 要素あたり約 67 バイト。
- 1M 文字の文字列を作った場合のメモリの増加量は 約 1M バイト。
- 文字列 1 文字あたり約 1 バイト。