next up previous
: スタックの使われ方の例 : [補足] C 言語でのメモリの利用のされ方 : [補足] C 言語でのメモリの利用のされ方

メモリの 4 領域

本演習ではこれまでメモリの領域として「テキスト領域」、 「データ領域」、「スタック領域」の 3 つを取り扱った。 本章ではこれらのメモリ領域が C 言語や C++ 言語でどのように使われるかを 簡単に解説する。 本章は C 言語の知識が必要であるため、自信が無い人は読み飛ばして構わない。 なお、各領域の名称は処理系によって異なることがある (たとえば 80x86 系では「テキスト領域」は「プログラム領域」と呼ばれる、など) が、その本質は多くの処理系で共通している。

まず、C 言語で扱うメモリの論理的な模式図は 図 5 のように 4 つに分けられる。

図 5: 論理的なメモリ上の模式図。
\begin{figure}\begin{center}\epsfxsize =6cm \epsfbox{memory_in_C.eps}\end{center}\end{figure}
このうち「静的領域」と「ヒープ領域」を合わせて「データ領域」と呼ぶことも あり、本演習でもその呼び方をしてきた。 なお、「論理的」という言葉は図 5 がハードウェア上での配置 をそのまま表しているのではなく、OS によって提供された仮想的なメモリの配置を 表していることを意味している。

各領域の役割は以下の通りである。

本演習でいままで用いたのは「テキスト領域」、 「データ領域 のうちの静的領域」、そして今回取り扱った「スタック領域」である。

今回はリターンアドレス $ra を保存するためにスタック領域を用いたが、 C 言語ではそれ以外にもローカル変数に代表される自動変数を スタックに確保するところに大きな特徴がある。 次節でもう詳しくそれを見てみよう。


平成16年11月17日