: スタックの使われ方の例
: [補足] C 言語でのメモリの利用のされ方
: [補足] C 言語でのメモリの利用のされ方
本演習ではこれまでメモリの領域として「テキスト領域」、
「データ領域」、「スタック領域」の 3 つを取り扱った。
本章ではこれらのメモリ領域が C 言語や C++ 言語でどのように使われるかを
簡単に解説する。
本章は C 言語の知識が必要であるため、自信が無い人は読み飛ばして構わない。
なお、各領域の名称は処理系によって異なることがある
(たとえば 80x86 系では「テキスト領域」は「プログラム領域」と呼ばれる、など)
が、その本質は多くの処理系で共通している。
まず、C 言語で扱うメモリの論理的な模式図は
図 5 のように 4 つに分けられる。
図 5:
論理的なメモリ上の模式図。
|
このうち「静的領域」と「ヒープ領域」を合わせて「データ領域」と呼ぶことも
あり、本演習でもその呼び方をしてきた。
なお、「論理的」という言葉は図 5 がハードウェア上での配置
をそのまま表しているのではなく、OS によって提供された仮想的なメモリの配置を
表していることを意味している。
各領域の役割は以下の通りである。
- テキスト領域:機械語に翻訳されたプログラムが格納される. この機械語の命令が 1 行づつ実行されることでプログラムが動く。
- 静的領域:グローバル変数などの静的変数が置かれる。
- ヒープ領域:メモリの動的管理 (C 言語の malloc 関数や C++ の new 演算子でメモリを確保すること) で用いられる。
- スタック領域:今回の演習で扱ったように CPU のレジスタを一時的に退避させたり、また C 言語の自動変数 (多くのローカル変数) が置かれる。
本演習でいままで用いたのは「テキスト領域」、
「データ領域 のうちの静的領域」、そして今回取り扱った「スタック領域」である。
今回はリターンアドレス $ra を保存するためにスタック領域を用いたが、
C 言語ではそれ以外にもローカル変数に代表される自動変数を
スタックに確保するところに大きな特徴がある。
次節でもう詳しくそれを見てみよう。
平成16年11月17日