動的メモリ確保
動的メモリ確保(どうてきメモリかくほ、英: dynamic memory allocation)は、メモリ管理手法のひとつであり、プログラムを実行しながら、随時必要なメモリ領域の確保と解放を行なう仕組みである。動的メモリアロケーション、動的メモリ割り当てとも。
メモリの利用状況は、自身の実行状況や他のプログラムの実行状況に応じて常に変動するため、それらの動作に支障をきたさないよう必要なメモリ領域を適切なアドレスに対して臨機応変に確保・解放を行なう必要がある。
プログラムによっては、必要な領域のサイズが外部からの入力や計算の進行状況、あるいは実行環境(ハードウェア仕様)によって決まることがあり、このような場合は一般的に動的メモリ確保が適している。
下位レベルのレイヤーでは、動的確保で作成できるデータ構造は原始的な配列のみである。配列では、確保するメモリ領域は連続している必要があるので、動的メモリ確保を実行する際、ヒープ領域(プログラムが生存期間を制御でき、自由に読み書きできる領域)から要求されたサイズの未使用領域のブロックを探す必要がある。ユーザーの要求に応じて処理対象や処理内容が変化する複雑なプログラムほど、動的メモリ確保は頻繁に行なわれる傾向があり、また扱うデータの量も大きくなる。そのため、動的メモリ確保を高速に行なうことが要求されるが、これは一般的に難しい問題である。この問題には、様々なアルゴリズムが提案されてきた。
メモリ確保アルゴリズムの主な課題は、確保と解放の速度、メモリの利用効率(いかに空き領域を少なくするか)、メモリの断片化(フラグメンテーション)の防止と解消(デフラグ、コンパクション)、小さなサイズのメモリを大量に確保した場合に起こる空間的オーバーヘッドを削減することなどである。