第31章 メモリとアドレス

 30章も終わり、そろそろメモリについて詳しく話すべき時がきたようです。今回は「メモリ」と「アドレス」についてずずずっと話していきます。


 では、今回の要点です。


 では、いってみましょう。


 今までにも少し話に出てきたメモリ。これはアプリケーションを実行するときの作業領域です。

 ディスク上にある実行ファイルをメモリ上にロードして、それからそれを使ってアプリケーションが実行されます。決してディスク上で実行されるわけではありません。

 初心者はディスクとメモリとを混同することがよくありますが、この2つは全く違うものです。確かにちょっとデータを置いておくのにディスクを使うこともありますが、基本的にディスクはデータをずっと保存しておくことを目的としています。

 一方、メモリは一時的な記憶を目的にしています。そのため、メモリは電源を切るたびに内容が破棄されます。

 また、実行ファイルに限らず、ファイルを使うには中身を一度メモリに読み出す必要があります

 それに、見た目も違いますね(笑)。メモリは普通チップですが、ディスクは普通円盤形をしています。



 つまり、アプリケーションの使用中のデータは全てメモリ上にあることになります。とすると、関数も変数もメモリの「どこか」にあるわけです。

 その「どこか」をアドレスと言います。住所ですね。まんまです。アドレスはバイト単位の通し番号です。

 ではアドレスはどのようにして知ることができるのでしょうか。それは簡単です。普通の変数は & を付けるだけです。配列変数や関数に至っては名前を書くだけで構いません。それで変数や関数の先頭のアドレスを知ることができます。

プログラム実行結果例
// Address1.cpp
#include <stdio.h>

int main()
{
    int  a;
    char b[10];
    printf("a    : %d\nb    : %d\nmain : %d\n", &a, b, main);
    return 0;
}
a    : 6618612
b    : 6618600
main : 4198400

 今回は気分を変えて printf を使ってみました(第24章参照)。\n で改行します。

 筆者が行ったときには a は 6618612、b は 6618600、main は 4198400でした。条件によっては異なる値が出てくるかもしれません。

 まぁ、実際そんな細かい数値はどうでもいいのです。とにかく、関数も変数もメモリ上にあって、その位置であるアドレスを持っているのです。そして、アドレスは何の変哲もないごく普通の数値なのです

 アドレスはただの数値ですから、それを変数に入れておくことができます。このことについては次回話します。


 何か短かったですが、非常に大事な章です。じっくりと理解しておいて下さい。

 では、今回の要点です。


 次回はアドレスを格納するための変数「ポインタ」について話してきます。では、次回まで。


第30章 マクロの書式 | 第32章 ポインタ天国

Last update was done on 1999.3.31

この講座の著作権はロベールが保有しています