はじめに
PHPのメモリ関連関数には、実行中のメモリ使用量を把握するためのツールが用意されています。
特に memory_get_usage()
と memory_get_peak_usage()
は、メモリの「現在値」と「最大値」をそれぞれ返す関数です。
この記事では、両者の違いと動作のイメージを、実際の出力結果を交えてわかりやすく解説します。
目次
💡 1. ふたつの関数の役割
関数 | 意味 | 備考 |
---|---|---|
memory_get_usage() | 現在のメモリ使用量を返す | 「いま使っている量」 |
memory_get_peak_usage() | 実行中に使用された最大メモリ量を返す | 「一時的にどこまで使ったか」 |
引数に true
を渡すと、OSから割り当てられたメモリ量を含んだ「実際の確保メモリ量」を返します。false
の場合は、PHPスクリプトの実データ部分のみです。
🧩 2. 実際のコードと結果
<?php
declare(strict_types=1);
error_reporting(-1);
function hoge() {
$s = str_repeat('a', 1_000_000); // 約1MBの文字列を生成
echo 'in hoge memory_get_usage: ' , memory_get_usage(true), "\n";
echo 'in hoge memory_get_peak_usage: ' , memory_get_peak_usage(true), "\n";
}
echo 'start memory_get_usage: ' , memory_get_usage(true), "\n";
echo 'start memory_get_peak_usage: ' , memory_get_peak_usage(true), "\n";
hoge();
echo 'end memory_get_usage: ' , memory_get_usage(true), "\n";
echo 'end memory_get_peak_usage: ' , memory_get_peak_usage(true), "\n";
✅ 実行結果例
start memory_get_usage: 2097152
start memory_get_peak_usage: 2097152
in hoge memory_get_usage: 102100992
in hoge memory_get_peak_usage: 102100992
end memory_get_usage: 2097152
end memory_get_peak_usage: 102100992
🧠 3. 動作の流れを理解する
┌──────────────────────────────┐
│ start → 約2MB │
│ ↓ │
│ hoge()呼び出し │
│ ↓ │
│ 文字列1MB生成 → 約100MB確保 │ ← memory_get_usage増加
│ ↓ │
│ hoge()終了 → 変数$s破棄 │
│ ↓ │
│ 使用量は元に戻る(約2MB) │
│ ただし peak は残る │
└──────────────────────────────┘
memory_get_usage()
は「現在値」なので、変数破棄後は小さくなる。memory_get_peak_usage()
は「最大値」なので、一度上がった分は戻らない。
🧩 4. 試験でのポイント整理
チェック項目 | 解説 |
---|---|
$s = str_repeat('a', 1_000_000); | 約1MBの文字列生成でメモリ使用量が増える |
memory_get_usage(true) | 現在確保しているメモリ量(ヒープ全体) |
memory_get_peak_usage(true) | 最大使用メモリ量。関数終了後もリセットされない |
関数終了後 | $s が破棄されるため、使用量は初期値に戻る |
ピークメモリ | 一度増えた分は戻らない(記録用) |
🧩 5. まとめ
memory_get_usage()
は「今どれくらい使っているか」memory_get_peak_usage()
は「一時的にどこまで使ったか」- 引数
true
を使うと「OSから確保した総メモリ量」 - 関数終了後でもピーク値は減らない
🧭 試験ワンポイント:「メモリ使用量は減るが、ピークメモリは減らない」という対比を問う問題が多いです。