スタックメモリとヒープメモリ
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 31/63。
Cプログラムが実行されるとき、メモリの2つの異なる領域、つまりスタックとヒープを使用します。これらのメモリ領域の違いを理解することは、効果的なCプログラミング、特にポインタや動的メモリ割り当てを扱う際に非常に重要です。
スタックは静的メモリ割り当てに使用されます。ここには、ローカル変数、関数の引数、および関数呼び出し情報が格納されます。スタックはシステムによって自動的に管理されます。ローカル変数を宣言すると、メモリがスタック上に割り当てられ、変数がスコープ外になると、そのメモリは自動的に解放されます。
void function() {
int x = 10; // スタック上に割り当てられます
char arr[100]; // これもスタック上に割り当てられます
// 関数が終了すると、メモリは自動的に解放されます
}ヒープは動的メモリ割り当てに使用されます。これは、プログラムの実行中にリクエストできる、より大きなメモリプールです。
スタックとは異なり、ヒープは手動での管理が必要です。つまり、明示的にメモリを要求し、使用が終わったら後でそれを解放しなければなりません。これにより、より多くの制御が可能になりますが、同時により多くの責任も伴います。
主な違いは管理方法にあります。スタックメモリは自動的でサイズが制限されていますが、ヒープメモリは手動で、より大きなサイズを扱えます。今後のレッスンでは、malloc() や free() といった関数を使用してヒープメモリを扱う方法を学びます。
チートシート
Cプログラムは、2つの異なるメモリ領域を使用します:
スタック: 静的メモリ割り当てに使用されます。ローカル変数、関数の引数、および関数呼び出し情報を格納します。メモリは自動的に管理されます。変数が宣言されたときに割り当てられ、スコープ外になったときに解放されます。
void function() {
int x = 10; // スタック上に割り当てられます
char arr[100]; // これもスタック上に割り当てられます
// 関数が終了するとメモリは自動的に解放されます
}ヒープ: 動的メモリ割り当てに使用されます。手動管理が必要な、より大きなメモリプールです。malloc() や free() などの関数を使用して、明示的にメモリを要求および解放する必要があります。
主な違い: スタックメモリは自動的でサイズが制限されていますが、ヒープメモリは手動であり、はるかに大きいです。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。