« ^ »

KiBを使う理由を図で考えてみる

所要時間: 約 2分

データの単位にはKiBやMiBといった単位が使われる事がある。1KiBは1024Bとなる。そういう知識はあるし、常識だと思う。特に疑問を持つような所ではないのかもしれないが、どうしてもしっくり来ないように、ずっと感じていた。だから図を描いてみる事にした。

https://res.cloudinary.com/symdon/image/upload/v1679808682/blog.symdon.info/1679808469/kib_xca9sv.png

+------------------------------------+
|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になっていて、キリが良い。
|                                    |   
+------------------------------------+
ソース