|
malloc(マロック, エムアロック)、free、calloc、reallocは、動的メモリ確保を行うC言語の標準ライブラリの関数である。 malloc が使用する実際のメモリ確保機構には様々な実装がある。それらの性能は、実行時間と要求されるメモリの両面で様々である。== 原理 == C言語は通常メモリを「静的メモリ確保」か「自動メモリ確保」で管理する。静的変数は主記憶上にプログラムが存在する期間中ずっと確保されている。自動変数(局所変数)は通常コールスタック上に確保され、対応するサブルーチンが実行中の間だけ存在する。しかし、いずれの方法も限界があり、確保できるメモリ量(変数のサイズ)はコンパイル時に決められてしまう(C99で初めて可変長配列が可能になった)。必要なサイズが実行時でないと判明しない場合、例えばディスク上のファイルから任意のサイズのデータを読み込むような場合、固定サイズのデータオブジェクトだけでは不十分である。 確保されたメモリの生存期間(使用可能期間)も問題となる。静的でも自動的でも確保されたメモリの生存期間はあらゆる状況に対応できるものではない。スタック上のデータは複数の関数呼出をまたいで持続できないし、静的データは必要かどうかに関わらずプログラムが動作中ずっとメモリ領域を確保し続ける。しかし、そうではなく確保したメモリの生存期間をプログラマが自由にできる必要がある場合も多い。 これらの制限は動的メモリ確保を使用することで解決する。メモリの管理は明示的に行う必要が出てくるが、柔軟性が向上する。「ヒープ領域」はこのために用意されたメモリ領域である。C言語では、 malloc 関数を使ってヒープ領域からメモリブロックを確保する。プログラムはmalloc の戻り値であるポインタを使って、そのメモリブロックにアクセスする。メモリブロックが不要になったら、そのポインタをfree に渡して解放し、他の用途に再利用できるようにする。ヒープではなくCのスタックフレームから実行時に動的にメモリを確保するライブラリルーチンもある(Unix系の alloca() 、Microsoft Windows のCランタイムライブラリの malloca() など)。このように確保したメモリは呼び出した関数から抜ける時点で自動的に解放される。しかし、C99標準で可変長配列がサポートされ、実行時に大きさを決定でき任意の静的スコープの範囲で存在するメモリ確保法ができたため、このようなメモリ確保法の必要性は薄れてきている。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Malloc」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 C dynamic memory allocation 」があります。 スポンサード リンク
|