2013-12-12

プログラミング用語を段階的に定義(2) 『メモリ』

computer-memory-chips.jpg

[ PR ]


コンピュータで非常に重要な役割を担うのがメモリです。

C言語などの低レイヤー言語を扱うときは特に重要になるので押さえておきたいところです。

定義

『メモリとは、コンピュータの記憶装置の一部で、一時的にデータを記録する装置である。
ハードディスクなどに比べ高速で動作するため、主に演算・計算のために使われる。
メモリは一般に、電源を切るとデータが失われる。』

メモリは、下の写真のように横長いパーツで、回路の集まりのように見えます。

20040427191548.jpg

ノートパソコンだとパソコンの裏面にあることが多く、上記の写真より小さいのが特徴です。

ちなみに、USBメモリやフラッシュメモリとは全く違うものです。USBメモリは電源を切ってもデータが残り、通信速度は遅いです。

アドレス

『メモリにはアドレスと呼ばれる番地が存在し、通常1つのアドレスに1バイトのデータが格納される。』

1ビットは2進数の1桁(0または1)で、1バイト=8ビットです(例:10010010)。

メモリのアドレスを図にすると次のような感じです。データがないアドレスもあります。

20131212154353.jpg

例えばこの例の場合は、106番地のデータは01000010ということになります。

複数アドレスの扱い

『一般に1バイトを超えるデータは、複数のアドレスに保存される。』

http://www.ced.is.utsunomiya-u.ac.jp/lecture/2012/prog/p2/kadai1/2.htmlにわかりやすい図があったので紹介します。

20131212154932.jpg

この図は、文字の配列がどのようにメモリに保存されるかを示した図です。

最後に\0(空文字)があるのは終わりを示すためです。

実際に配列はこのようにメモリに保存されます(C言語の構造体なども同様です)。

日本語文字について

日本語文字の保存については http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html にわかりやすい図がありました。

20131212155417.jpg

これはもちろんイメージ図ですが、日本語は1バイトではなく2バイトで表現されるので、1バイトずつアドレスが割り当てられるためこのようなイメージになります。

整数や小数を表す

『整数や小数を表すには、複数のアドレスが必要である。』

http://www.akita-nct.ac.jp/~yamamoto/lecture/2006/5E/C/5_pointer_html/node2.htmlの図を使って説明します。

20131212160557.jpg

例えば整数の3は、2進数で表すと11になります。つまり1バイト未満なのでアドレスは1つでいいのでは・・・?

実は、整数や小数の扱いを効率的にするために、データに合わせた最大のビット数を事前に決めています。

この数というのは、CPUが1度で読み取れる数に等しいことが多く、32ビットCPUでは32ビット、64ビットCPUでは64ビットとなります(必ずしもこうなるとは限りませんが)。

ですので、この例では整数を表すビット数小数を表すビット数よりも小さいということになります。

まとめ

メモリについては、これぐらい知識があれば十分実用的だと思います。

プログラミング言語の種類およびデータ型によってメモリ配置が変わってくるので、あとは必要に応じて勉強すればいいと思います。

コンピュータープログラミング入門以前
岩永信之
毎日コミュニケーションズ
売り上げランキング: 401,172

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.