メモリの割り当てにmalloc関数がどのように機能するのか?
mallocは動的メモリ割り当て関数で、実行時に指定されたサイズのメモリ空間を割り当てるために使われます。その原理は、ヒープ上に指定されたサイズの連続したメモリ空間を割り当て、そのメモリブロックの開始アドレスを返すことです。
実際の割り当てプロセスは以下の通りです。
- malloc関数が呼び出されると、システムはまずヒープ上で要求のサイズを満たす十分な大きさの連続メモリ領域を検索します。このプロセスは、割り当て済みと未割り当てのメモリブロックを記録するデータ構造(通常は連結リスト)を通して実行されます。
- 十分な大きさのメモリーブロックが見つかれば、それはシステムによって割り当て済みとしてフラグが立てられ、そのメモリーブロックの開始アドレスが返されます。
- メモリ不足エラーが起こり、malloc関数がNULLを返すのは、十分な大きさのメモリブロックが見つからない場合です。
- 割り当てられるメモリブロックは、システムがこのメモリブロックに関する情報(サイズ、割り当て済みなど)を記録するために余分のメモリを必要とするため、通常リクエストされたサイズより少し大きくなります。
- マロック関数が呼び出されると、プログラムは返されたポインタを使用して割り当てられたメモリ空間にアクセスして操作することができます。
- このメモリー空間が必要でなくなった場合は、free関数はそのブロックの解放のために使われます。未割り当て状態にマークされ、以後のmalloc呼び出しのために使われます。
malloc で確保したメモリは、使用後に必ず解放する必要があります。malloc 関数は、メモリの確保だけを行うため、確保したメモリは事前に初期化されません。使用前に必ず、手動で初期化処理を行う必要があります。