データの単位にはKiBやMiBといった単位が使われる事がある。1KiBは1024Bとなる。そういう知識はあるし、常識だと思う。特に疑問を持つような所ではないのかもしれないが、どうしてもしっくり来ないように、ずっと感じていた。だから図を描いてみる事にした。
+------------------------------------+
|DIMM |
| bit bit bit bit bit bit bit bit |
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b00000000 (0番地、先頭)
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b00000001 (1番地)
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b00000010 (2番地)
| +---+---+---+---+---+---+---+---+ |
| . |
| . |
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b1111100111 (999番地)
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b1111101000 (1000番地)
| +---+---+---+---+---+---+---+---+ | 先頭から考えると丁度良くはあるけれど、
| . | アドレスの指定として0b1111101001は指定できる状態になっている。
| . | この桁で表現できる値で0b1111101001より大きな数字のアドレスが無駄になってしまうし、
| . | もしそうだとすると、そのアドレスへのアクセスをエラーにしないといけないため
| . | 扱い辛いシステムになってしまう。
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b1111111110 (1022番地)
| +---+---+---+---+---+---+---+---+ |
| | | | | | | | | | | Address: 0b1111111111 (1023番地, 先頭を1つ目と考えると1024つ目)
| +---+---+---+---+---+---+---+---+ | 末尾のビットが全て1になっていて、キリが良い。
| |
+------------------------------------+