《PHP8上級試験対策》memory_get_usage() と memory_get_peak_usage() の違いを理解する

  • URLをコピーしました!

はじめに

PHPのメモリ関連関数には、実行中のメモリ使用量を把握するためのツールが用意されています。
特に memory_get_usage()memory_get_peak_usage() は、メモリの「現在値」と「最大値」をそれぞれ返す関数です。
この記事では、両者の違いと動作のイメージを、実際の出力結果を交えてわかりやすく解説します。

キーワード: memory_get_usage / memory_get_peak_usage / メモリ使用量 / PHPヒープ / ピークメモリ

目次

💡 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から確保した総メモリ量」
  • 関数終了後でもピーク値は減らない

🧭 試験ワンポイント:「メモリ使用量は減るが、ピークメモリは減らない」という対比を問う問題が多いです。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次