『Cプログラミング専門課程』目次第4章メモリ

4.1 アドレス (1)


コンピュータは、ポケコンと呼ばれるものから、貿易摩擦解消のため無理矢 理購入させられるスーパーコンピュータに至るまで、量に大差はあれど、メモ リを使用しています。

コンピュータは、CPUとメモリと周辺機器類から成り立っています。この中 で周辺機器はディスプレイ、キーボード、マウス、プリンタ、モデム、フロッ ピィーディスクドライブ、テープドライブ、ハードディスク、スキャナー、ス ピーカー...と数え上げていったらきりがありません。しかし、コンピュータ の理解の上では核心ではありません。あくまでも、周辺です。

CPUは、メモリ上に記憶内容を解釈しながら、さまざまな処理をします。そ の動作の詳細はCPUの種類により異なります。このCPU の違いにベッタリと依 存しきった言語が「アセンブリ言語」です。この言語を使用してプログラムを 組んだ場合、でき上がったプログラムは同一あるいは同種(同シリーズ)のコ ンピュータでしか動きません。

C言語で書いたプログラムは、コンパイルし、リンクし、実行可能なファイ ル(実行プログラム)を作成し、メモリ上に読み込み実行できます。メモリに 読み込み(ロード)し実行することから、実行プログラムをロードモジュール とも呼びます。ロードモジュールは、同一あるいは同種のコンピュータで実行 できます。ここまではアセンブリ言語と同じですが、異種のコンピュータで実 行したい場合、コンパイルし直すことで動作します。ただし、ちゃんと機種に 依存しないように書いたプログラムで、もしどうしても依存部分がある場合は、 依存部分を書き直したとき、異機種でも動きます。Cのプログラムはちゃんと 書けば移植性がかなり良い。

つまり、C言語でプログラムを書くことは、CPU依存性をなくすことです。 したがって、C言語を勉強する際、CPUについてはとくに知らなくても構いま せん。

しかし、コンピュータのもう1つの重要な部分である「メモリ」を常に意識 しなくてはならないのがC言語の特徴です。コンピュータの構造を意識しなく ても書ける言語を高水準言語(高級言語)、意識して書く言語を低水準言語 (低級言語)と呼びます。BASIC,FORTRAN,PASCALなどは基本的にはコンピュー タアーキテクチャを意識せずに記述できるので、本当に高級かどうかは別にし て、高級言語です。アセンブリ言語は、CPU、メモリその他あらゆるコンピュー タアーキテクチャを徹底的に知り尽くしていることが前提の言語で、これこそ 低級言語そのものです。

C言語は、高級言語と低級言語の中間に位置します。見かけは高級言語みた いですが、コンピュータアーキテクチャのうち、メモリについては絶対に意識 せざるをえない言語です。周辺アーキテクチャについては意識しなければなら ない場合もあります。しかし、CPUについては基本的には意識する必要はあり ません。こういう曖昧なところがあるため、人により高級言語にされたり、低 級言語にされたりします。

私は、C言語は高級言語とは思いません。かなり低級な言語ですが、プログ ラムの生産性は多くの高級言語以上です。高級言語と低級言語の両方の機能を 持ち、両方の長所を生かそうとしたのですが、そんなにうまくはいかず、当然 のことですが両方の欠点も持ち合わせています。

メモリをきちんと理解せずにC言語を使うのは無茶苦茶に危険です。でも、 メモリさえ理解できれば、C言語は急にやさしくなります。危険さが常につき まとうのは低級言語の基本的な性格で仕方がありませんが、逆に何でもできて 便利です。多くのC解説書がメモリに対して十分な説明を行なわないままポイ ンタの解説に走っているのは非常に残念です。

*常識*
  • C言語は高級言語の顔をした低級言語。
  • メモリのマスターが最重要。

⇒⇒⇒⇒次ページへ


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング専門課程』目次第4章メモリ