プログラムの話 メモリーのアドレス

2018年8月19日

パソコンを購入する時に、メモリーの容量は大事な判断材料です。そのメモリーの構造について今回は紹介します。

1.メモリーにはアドレスがある

メモリーにはアドレスが付いています。昔の8ビットパソコンの主力機種には、たったの64kバイトしかメモリがありませんでした。そして、1バイトごとに番地が振り分けられていました。(0xは16進数を表します。また、番地に入っている値は例であって意味はありません)

0番地 0x30
1番地 0x31
2番地 0x32


FFFF番地 0xC9

という風に65536(0xFFFF)個の番地があって、1バイトの値が格納されていました。今の64ビットパソコンのメモリーは、8ビットパソコンよりもずっと容量が大きいですが、アドレスがあって1バイトが格納されているという形は変わりません(1アドレスが1バイトではない例外もありますが、アドレスがあることは変わりません)。

2.アセンブラ言語では、アドレスを指定して値をセットできた

アセンブラ言語では、アドレスに直接値を入れることができました。

LD (1000H) A

1000番地にAレジスタの値を入れますという命令です。このように、8ビットパソコンのアセンブラプログラムでは、アドレスを意識してプログラムをしていたのです。

これは8ビットパソコンだからできたわけで、16ビット以上でアドレスを意識してプログラムをしていたら、完成までに途方もない時間が掛かるでしょう。そのため、人間が分かる文法でプログラムを組むようになりました。

組んだプログラムは、コンパイルによりビットの塊になり、コンピューターが理解できる形に変更されます。現在のアプリケーションは複雑な構成ですが、最終的にはビットの塊になります。

3.C/C++言語は、アドレスが分かるが自分でアドレスは指定しない

C/C++言語もアドレスを扱う言語なのですが、アドレスを指定することはありません。

char *moji ;
moji = new char [3] ;

moji変数にはアドレスが入るのですが、アドレスは自動で振り分けてくれるので、プログラマが指定する必要はありません。そして、アドレスから3番地分を領域として確保しています。

昔はメモリーの量が少なかったため、必要な時だけメモリーを確保して、必要がなくなったら開放する必要がありました。アセンブラやC/C++言語を使う必要があったのです。

今はメモリーに余裕があるので、いちいち確保して開放する必要がなくなりました。また、その確保と開放もプログラム言語側が最適に行ってくれるので、プログラマの負担は小さくなっています。

しかし、何も考えずにプログラムを組むと、無駄な処理で動作が遅かったり、メモリーを多く使ってしまって動作が遅くなるなどの弊害が出ます。やはり、基本をマスターして、効率の良いプログラムの作成を心掛けなければなりません。