●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

プログラムのメモリの仕組み「スタック / ヒープ」とは?C言語の基本をやさしく解説!

C言語では、変数やデータを保存するためにメモリを使います。
このとき主に使われる領域が、スタック(Stack)ヒープ(Heap)です。
それぞれの特徴や使い方を理解して、安全で効率の良いプログラミングを目指しましょう!

スタックとは?

スタックは、関数の呼び出し時に自動的に使われるメモリ領域です。
ローカル変数(関数の中で宣言された変数)はスタックに保存されます。

  • 関数が呼び出されると領域が「積まれる」
  • 関数が終わると領域が「自動で解放される」
  • 高速で扱えるが、使える容量が限られている

スタックの使用例

void func() {
    int a = 10;  // aはスタック領域に保存される
}
    

ヒープとは?

ヒープは、プログラム実行中に必要な分だけメモリを「手動で」確保・解放する領域です。
動的メモリ確保(malloc()free())によって管理されます。

  • mallocで確保、freeで解放
  • サイズを柔軟に決められる(配列のサイズが実行時に決定できる)
  • 解放を忘れるとメモリリークが発生

ヒープの使用例

int *arr = (int *)malloc(sizeof(int) * 10);  // ヒープにint型10個分確保
if (arr != NULL) {
    arr[0] = 1;
    free(arr);  // 必ず解放!
}
    

スタックとヒープの違い

項目 スタック ヒープ
確保方法 自動(関数呼び出し時) 手動(malloc / free)
解放方法 自動(関数終了時) 手動(free)
用途 関数内のローカル変数など 実行時にサイズが決まるデータ
容量 少ない 比較的多い
アクセス速度 速い やや遅い

注意点

  • ヒープは free を忘れるとメモリが無駄になる
  • スタックは 使いすぎるとスタックオーバーフローになる

まとめ

スタック短期間・高速・自動管理ヒープ長期間・柔軟・手動管理が特徴です。
C言語ではこの2つのメモリ領域を理解して使い分けることで、効率的で安全なプログラムが書けるようになります。
初心者の方はまず、mallocで確保したメモリはfreeで必ず解放する、という習慣をつけましょう!