動的メモリ確保
現実のコンピュータでは、メモリに記憶できる情報の量は限られている。理論的なメモリアドレス空間(仮想アドレス)が必要十分に(例えば48ビットなど)確保されていても、たいてい物理的に搭載されているメモリ量はその上限よりも小さく、さらに個々のコンピュータハードウェアによって異なることが多い。また、マルチタスクシステムでは一つのプログラムやデータがメモリ全体を使いきってしまうことはできず、他のいろいろなプログラムやデータと分けあって使わなければならない。動的メモリ確保を使うことで、プログラムの実行時に必要な分だけ記憶領域を確保 (allocate) し、また、記憶領域が不要になったときには、他のデータに再利用できるよう、解放 (release, free, deallocate) することができる。物理メモリを仮想化し、個々のプログラムからの要求に応じて「メモリの分け前」を確保・調整するのは、オペレーティングシステムや標準ライブラリのような下位層の仕事である。
自動メモリ確保(スタック上に変数の記憶領域を確保する方式)や静的メモリ確保では、メモリ領域のサイズおよびメモリが確保・解放されるタイミング(生存期間)はプログラムの記述時に静的に決まる。一方、動的メモリ確保では、メモリ領域のサイズおよびメモリが確保・解放されるタイミング(生存期間)はプログラムの実行時に動的に決まる。
また、カーネルの内部では、デバイスドライバと機器の間でDirect Memory Accessによって通信するときのDMA領域の割り当てを行なう場合など、物理アドレスが連続している領域が必要な場合があり、このようなときは、サイズの大小にかかわらず、全て動的メモリ確保によってメモリを確保しなければならない。
オブジェクト指向言語やLISPなどのプログラミング言語はオブジェクトが仮想空間上に散在(あるいは遍在)することになり、仮想記憶機構によるページアウトが大きな性能低下を招く。このためガベージコレクションでメモリ利用効率を上げる。ガベージコレクションによるメモリ解放は必ずしも物理ページの解放ではなく、解放したメモリ領域をそのプロセス内で再利用することが前提にある。実際に物理ページを解放するにはコンパクションによって解放すべき領域をまとめなければならない。