スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

1 KB って何バイト?

今回はコンピューター関連のクイズです。

1 KB は何バイトでしょうか ?


正解

1000 バイトと答えた方も一概に間違いともいえないのですが、 それだとクイズにならないので、不正解ということにしておきます。
正解は 1024 バイトです。

なぜ、 1000 ぴったりではないかというと 1024 の方がコンピューターにとって、 切りがいい数字だからです。
コンピューターでは 2 の乗数が切りがいい値になります。 1024 は乗数で表すと 210 です。

KB より大きな M(メガ), G(ギガ), T(テラ) もそれぞれ、 220, 230, 240 となります。

いくら切りがいいからといっても紛らわしいから 1000 の方がいいじゃん といわれると確かにそうなのですが、 1000 にかなり近い 2 の乗数がちょうど 2 の 10 乗だというのは、 あまりにもちょうどいいので、 1 KB を 1024 にした気持ちもわかります。

コンピューターでは 2 の乗数が切りがいいからと書きましたが、 次節から切りがいい理由も説明しています。
プログラミング経験のない方でも分かるように書いたつもりです。 結構長いのですが、これでも細かいところは省いたので、 詳しい人にはツッコミどころ満載だと思います。

なぜ 2 の乗数が切りがいいか

よく 32 ビット PC や 64 ビット CPU といった言葉を聞くかもしれませんが、 この値は CPU が 一回に処理できるデータ量 を表しています。この値が大きい方が一度にたくさん処理できて性能がいいということになります
ちなみに CPU の性能はクロック数も使いますが、こちらは処理の速度を表します。


10 バイトのデータを 32 ビット CPU で処理したとします。 32 ビットは 4 バイトですので、 4 + 4 + 2 で 10 バイトは 3 回で処理します。
10 バイト
最後の 2 バイトですが、 残った 2 バイトで何か別の処理ができるということはありません。 この 2 バイトの空きは無駄になってしまいます。
それではもったいないので、プログラミングする場合にはなるべく切りがよく データを作ります。

12 バイトであれば、 4 + 4 + 4 でちょうど切りよく処理ができます。 しかし、 64 ビット(8 バイト)では 8 + 4 でやはり無駄がでます。
無駄がでないサイズは 8, 16 といった値です。
12 バイト
CPU の処理量は 8, 16, 32, 64 ビットと倍々で増えてきました。 今後も増えるとしたら、倍々で増えるでしょう。
ビットをバイトで表すと 1, 2, 4, 8 です。一度に処理できる量が 2 の乗数であるため、 データのサイズも 2 の乗数であれば、必ず割り切れます。 これがコンピューターでは 2 の乗数が切りがいい理由です。

なぜ、倍々で増えるのか

倍々で増えると書きましたが、この理由も説明しておきます。
これはデータのサイズに関連しています。

データは変数という入れ物に入れて処理します。 今のコンピューターでよく使われている変数は 32, 64 ビット整数、 64 ビット実数です。 サイズが大きい方がより大きなデータを扱えます。
先ほどの 10 バイトといったデータはコピーなどまとまりとして処理するときの話で、 数値演算などはこの変数のサイズごとでしかできません。
16 ビット整数などの変数もあるのですが、 あまり大きな値を入れられない上、32 ビット CPU では無駄がでるので、あまり使われなくなりました。
16 ビット整数
データのサイズに 8, 16, 32, 64 ビットといったサイズが使われているため、 CPU を 40, 48 ビットといった値にしても無駄がでます。 CPU もそれを切りよく処理できる処理量になっています。

今後の CPU

今後も増えるとしたら倍々に増えると思いますが、 今後の CPU の見通しに対して私の意見を書いてみたいと思います。

64 ビット CPU

今は PC では 32 ビットが主流ですが、 64 ビットも出てきました。 今後は 64 ビット CPU が主流になっていくのではないかと思います。

実数は 64 ビットの変数が多く使われますし、 32 ビットの整数では値が足りないことが結構あります。
2038 年問題 というものがあるのですが、 これも時間を格納するデータが 32 ビット整数では足りなくなって起こる問題です。
ただ、今ではほとんど 64 ビット整数が使われるようになりましたし、 ミレニアムとも関係ないので、 2000 年問題 ほど騒がれることもなく終わると思います。 64 ビット整数にしても先延ばしにしただけと思われるかもしれませんが、 西暦 3000 億年という太陽系の寿命以上の年まで使えるようになっています。

32 ビット CPU でも 64 ビット整数は扱えるのですが、処理時間が違います。
64 ビット整数は 32 ビット CPU では 2 回、 64 ビット CPU では 1 回の処理でできます。 分ける処理なども入るので、実際には倍以上速くなります。

また、 32 ビットと 64 ビットでは使えるメモリー量にも違いがあります。
これはメモリー上の位置の変数が CPU が処理しやすいサイズを使っているためです。 Windows の場合、 32 ビット CPU では変数のサイズも 32 ビットです。 このサイズで扱える値の上限のため、 一つのプログラムではいくらメモリを積んでいても最大 2 GB までしか使えません。

128 ビット CPU

次に出るとしたら、 128 ビット CPU ですが、 おそらく128 ビット CPUは当分出てこないのではないかと思います。

128 ビット実数という変数はあります。しかし、 京のようなスーパーコンピューターの世界はよく知りませんが、 PC でそこまでの精度が必要な場合はほとんどありません。 整数も 64 ビットで天文学的な値まで扱えます。
CPU の処理量を大きくしても変数を使っていなければ無駄に余らせるだけです。

それに変更の手間というものもあります。
メモリーやハードディスクの容量といったものに比べて CPU の処理量の増加はちょっと遅いと思われるかもしれません。 これはソフトの対応も必要なためです。

64 ビット PC では 32 ビット用のプログラムも動作します。 しかし、 32 ビットとして動作させるので、 64 ビットの性能を使うことができません。 64 ビット CPU を使うにはソフトもそれに対応する必要があります。
この対応はプログラムによっては結構大変なものです。

64 ビットから 128 ビットへの変更の際もソフトの対応は必要になってきます。 128 ビットへの変更は手間のわりに速度の効果が低いのではないかと思います。

関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

1000バイトは正解でもあります。

クイズの正解が1つだとは限りません。

No title

1024Byteだけを正解にしたいなら1KiBって書いた方がいい気がする。

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
9位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

09月 | 2017年10月 | 11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。