概要
メモリ不足(Out of memory)は、コンピューターシステムに割り当てられたメモリが十分でないことで起こる様々な不具合。システムが不安定になったり、作業データが保存できなくなったり、ひどい時は突然強制終了してしまったりする。
昔のパソコンやPDAでは搭載しているメモリ自体が少ない上、OSにシステムリソースの不足や「容量の壁」(後述)といった技術的制約があり、大容量のメモリをうまく活かせなかったため、メモリ不足がしばしば問題になった。今時のパソコンやスマートフォンなどは数GB以上のメモリを搭載している上、一部のメモリ領域に圧縮をかけることで節約する機能があったり、仮想メモリといって溢れたデータをストレージに退避させることで物理メモリを遥かに超えるデータを扱うことができたりするようになったので、メモリ不足に悩まされることは減っている。
詳細
Windowsの32ビットアプリは、使えるメモリが(仮想メモリ込みで)実質2GBしかなかった。ペイントツールなどで高解像度設定にするとレイヤなどに使えるメモリが少なくなり、なんとか描き始めることはできても使っているうちにエラーが起きて再起動しないといけなくなることが割とよくあった。
さらに昔のWindows9xでは空きメモリがあってもシステムリソース不足で不安定になったりもした。システムリソースとはWindowsがユーザーやグラフィック関連の情報を格納するメインメモリ上の特殊な領域で、ここが一杯になるとメインメモリに余裕があっても新しいソフトを起動したりウィンドウを開くことができなくなる。Windows9xでは16ビット用のシステムリソースが384KBしかなく、32ビットアプリを使っていても内部で16ビットのDLLなどを呼び出している場合はシステムリソースがすぐに一杯になってしまった。32ビットのシステムリソースは6MBと制約が緩やかだが、ソフトを終了させたりウィンドウを閉じてもリソースが完全に回復しないという問題があり、長い間再起動せずに使っていると不安定になりがちだった。現在のWindowsNT系ではデスクトップヒープに置き換えられたためこの問題は基本的に発生しないが、大量にウィンドウを開くとデスクトップヒープの制限により、「メモリ不足」エラーが稀に発生することがある。
もっと大昔のMS-DOSの時代にはメインメモリが640KBしか使えない「640KBの壁」があった。DOS本体やデバイスドライバ、日本語プログラムのFEP(Windows風に言うとIME)などの常駐プログラムを差し引くと、自由に使える領域はどう頑張っても400KB未満しかない。メモリ空間を仮想的に切り替えながら使う「バンク切り換え」によるさまざまな拡張方法が試され、80386以降のCPUを搭載したマシンでは仮想86モードを使うEMSが広く普及した(最大32MBまで対応)が、初期設定ファイルのCONFIG.SYSの編集が必要だったりして、ユーザーにとっては煩雑でミスが起こりがちなものであった。
ハードウェアに加えてOSやアプリも64ビット化されたシステムでは、仮想メモリ込みで数TBのメモリ空間が使える(もちろんストレージの空き容量に左右されるため実質はもっと少ないが)ため、こういった制約が取り払われている…のだが、メモリリークといって、プログラムの不具合によってメモリの解放がなされず、消費メモリがどんどん増えて他のプログラムの使用領域を圧迫する現象が起こることがある。この場合は原因となっているプログラムを再起動すればよいのだが、常駐プログラムやデバイスドライバ、あるいはOSそのもののバグが原因になっている場合はシステムごと再起動しない限り解決しない。
メモリ不足でエラーにはならなくても、メモリが一杯になってストレージに退避するデータ(メモリスワップ)があまりにも増えると、(メモリよりSSDの方がアクセススピードが遅いので)処理の足を引っ張ることがあり、これを「メモリ不足」と表現することがある。今時のOSは、メモリがなければ無いなりに(圧縮や仮想メモリを駆使して)なんとかするが、あればあるだけ(キャッシュ用などとして)有効に使うような設計になっているので、メモリは予算の許す限り潤沢に積んでおくに越したことはない。
メモリ不足はVRAMでも発生する。というか、今ではメインメモリよりもこちらの方が起こりがちな問題かもしれない。ゲームなどはVRAMが足りないとフレームレートが低下したり、途中でエラーが出て強制終了してしまうこともある。
関連タグ
メモリ パソコン Windows MS-DOS ブルースクリーン エラー
ペイントツールSAI…メモリ不足エラーが特に起こりやすいことで知られたペイントツール。開発元は「処理速度と描画品質を最優先とする設計となっているため、メモリ圧縮などの処理速度を低下させる仕組みを一切持っていません」「メモリ効率は考慮していません」と宣言している。
カストロ(HUNTER×HUNTER)…『HUNTER×HUNTER』の登場人物であり、彼の行動が「メモリ不足」という旨の言葉に例えられた。