第十一章
メモリで見る基本型とクラス型の違い
メモリの基本
パソコンに入っているメモリという部品の基礎を
プログラミングの視点から紹介します。
私たちの身の丈にあった説明を
していくつもりなので、
若干精度を欠いた表現があるかもしれないが
許してほしい。
基本型の変数と、クラス型の変数の違いに
触れてくれれば十分だ。
目次
1.メモリのイメージ復習
前回メモリについて解説したのは、
第四章 変数・リテラル・データ型
なんでデータ型があるの?
でした。
ちょっと思い出してみましょう。
メモリセル1個で1bit。
1byte = 8bit
とご紹介しました。
基本型(プリミティブ型)では、データ型ごとにbyte数が決まっています。
例えば、intでは、4byte、 doubleでは、8byteです。
→ 基本型のデータ型一覧
2.メモリアドレス
メモリには、1byteごとに番号がついています。
この番号のことを「メモリアドレス」といいます。(単にアドレスとも)
名前の通りメモリの位置情報を示すものです。
メモリアドレスは OSが管理していて、OS上で動いているアプリケーションにメモリを割り当てています。
コマンドラインやエディタ、Javaも同様です。
メモリアドレスは符号(マイナス)なしの整数で、一般的に16進数で表記します。
3.16進数
16進数?!
なんすかそりゃ!
そうね~。
地球人は指が両手で 10本だから
10進数を使っているけど、
16本だったら
16進数だったねって感じ?
指が16本だったら便利なんですかねぇ?
ああっ
興味がそっちに持ってかれた・・・。
16進数について軽く触れておきましょう。
10進数
10進数は、0~9 までの10種類の数字を用いて
9の次は 10に繰り上がる表記方法です。
16進数
16進数の場合は、0~F までの16種類の数字を用いて
Fの次に 10に繰り上がる表記方法です。
10進数の 10と、16進数の 10は、値がちがいますね。
(16進数の 10は 10進数の 16です。)
なので、読み方は「イチゼロ」として、リテラルは「0x」を先頭に加えます。
16進数の「10」は、プログラムの中では 0x10 と書きます。
10進数と16進数
| 10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16進数(0x) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| 10進数 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 16進数(0x) | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
4.Javaではメモリアドレスが使えない
Javaではメモリアドレスを使ってプログラムを書くことができません。
C言語などでは、ポインタという形でメモリアドレスを使えますが、
Javaではムリです。
Javaはメモリの管理をプログラムに委ねている言語なのです。
この為、Javaがメモリをどう扱うのか、ある程度意識しておく必要があります。
5. 65Kbyteのメモリモデル
この章では以下の様なメモリモデルを使って、変数とメモリの関係を解説していきたいと思います。
65Kbyteのメモリモデル
画像をクリックして拡大だ。
メモリモデルの説明です。
図の1マスがメモリの 1byteを表しています。
1byte以上の領域を確保する場合は、先頭のメモリアドレスで管理されます。
メモリアドレスは、縦軸と横軸の組み合わせで、
左上から右に 0x0000 0x0001 0x0002 ...
のように進みます。
一番右の 0x000F まで進んだら、
折り返して2段目の右から 0x0010 0x0011 0x0012 ...と進んでいきます。
メモリアドレスは、このように通し番号で並んでいると考えてください。
このメモリモデルでは、0x0000 ~ 0xffff のメモリアドレスを持っています。
全体のメモリサイズは 0xffff+1byte = 65536byteってことですね。
メモリアドレスの値は 2byteで表現されている環境です。
注:このモデルでのメモリアドレスもあくまで例です。
ホントはこんなに小さな値ではないですよね。
環境依存ですが、大体 4byte位で表現されているかな?
8bit 65Kbyteのメモリって小さっ~!
メモリが 1列にずーっと伸びているのを、
紙面の都合で折り返したと思ってくれ。
では本題に入っていきましょう。