Home > 8 月 8th, 2008

2008.08.08

C言語では、メモリはどうやって確保されている?

勉強会は週に1回開催していて、メイン担当は持ち回り制である。

で、このブログ記事を更新するのはメイン担当者の役割だ。
と、ルールを決めた本人が自分の当番を忘れてしまっていて「やべっ、示しがつかない…」と猛反省。

さて、今回はC言語で「変数はメモリ内にどうやって格納されていくのか」のお話。
深いところまで突っ込んでいこうと思ったのだが、文章化すると思ったより長くなってしまったので序論な感じではある。

C言語では、関数内のローカル変数は、関数を抜けると確保していたメモリ領域は開放される。

この時に使われるのはメモリ内の「スタック」と呼ばれる領域だ。
スタックというのは後入れ先出し方式で使われ、その名の通り、後に格納した値から先に使う(解放する)時に利用される領域である。

int a = 123;
int b = 987;

という宣言をしたとしよう。
メモリの下(番地が大きい方)から値が格納されていくので、下図のようなイメージとなる。

    ├────────┤
      │      987       │
     ├────────┤
      │      123       │
     ├────────┤
      │ < 使用済領域 > │
     └────────┘

(more…)