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でした。条件によっては異なる値が出てくるかもしれません。
まぁ、実際そんな細かい数値はどうでもいいのです。とにかく、関数も変数もメモリ上にあって、その位置であるアドレスを持っているのです。そして、アドレスは何の変哲もないごく普通の数値なのです。
アドレスはただの数値ですから、それを変数に入れておくことができます。このことについては次回話します。
何か短かったですが、非常に大事な章です。じっくりと理解しておいて下さい。
では、今回の要点です。
次回はアドレスを格納するための変数「ポインタ」について話してきます。では、次回まで。
Last update was done on 1999.3.31
この講座の著作権はロベールが保有しています