Menu
Coddy logo textTech

スタックメモリとヒープメモリ

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() などの関数を使用して、明示的にメモリを要求および解放する必要があります。

主な違い: スタックメモリは自動的でサイズが制限されていますが、ヒープメモリは手動であり、はるかに大きいです。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン