ヒープ上の動的メモリ
ヒープ上で配置されたオブジェクト用のメモリは、そのオブジェクトを明示的に解放するまで有効です。このタイプのメモリ記憶領域は、実行するまでデータ量がわからないアプリケーションの場合に便利です。
Cでは、メモリは標準ライブラリ関数のmallocや、関連関数のcalloc 、reallocのいずれかを使用して配置します。メモリは、freeを使用して解放します。
C++では、newという特別なキーワードによってメモリの割当てやコンストラクタの実行を行います。 newを使用して割り当てたメモリは、キーワードdeleteを使用して解放する必要があります。
各ヒープのサイズの設定方法は、ヒープメモリの設定を参照してください。
潜在的な問題
ヒープ上で割り当てたオブジェクトを使用するアプリケーションは、ヒープ上でオブジェクトを配置できない状況が発生しやすいため、慎重に設計される必要があります。
アプリケーションで使用するメモリ容量が大きすぎる場合、ヒープが不足することがあります。また、すでに使用されていないメモリが解放されていない場合にも、ヒープが不足することがあります。
配置されたメモリブロックごとに、管理用に数バイトのデータが必要になります。小さなブロックを多数配置するアプリケーションの場合は、管理用データが原因のオーバヘッドが問題になることがあります。
断片化の問題もあります。断片化とは、小さな空きメモリがあるヒープが、配置されたオブジェクトで使用されるメモリにより分断されることです。空きメモリの合計サイズがオブジェクトのサイズを超えている場合でも、そのオブジェクトに十分な大きさの連続した空きメモリがない場合は、新しいオブジェクトを配置することができません。
断片化は、メモリの割当てと解放を繰り返すほど増加する傾向があります。この理由から、長期間の実行を目的とするアプリケーションでは、ヒープ上に割り当てられたメモリの使用を回避するようにしてください。