- ベストアンサー
メモリについての質問
基本的なことですが、自分では解決できないので質問させてもらいます。 (1)1つのアドレスは8ビットときまってますが、8ビットである必然性はあるのでしょうか?別に9ビットでも7ビットでもいいと思うのですが、ただの歴史的な慣習でしょうか? (2)CPUの性能はアクセスできるビット数が16,32と上がってますが、一つのアドレスのメモリを2倍(8→16ビット)にしたら同様にコンピュータの性能が上がると思うのですが、どうしてそうならないのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(1)バイトマシンだからです。1バイト=8ビット 昔、キャラクタマシンというのも存在していました。 1キャラクタ=6ビットでした。 今、8ビット以外を使うと、文字コードの互換性など 大混乱を起こすでしょう。売れないのでありえません。 処理性能の問題とともに互換性の問題も大きいでしょう。 なお、7ビットや9ビットはデータ効率が悪いと思いま すよ。 (2)そのようなマシンも昔ありました。ワードマシンです。 32ビット単位のアドレッシングですね。無くなったで しょう。16ビット単位もありました。 パソコンが世の中に出る前から全てバイトマシンに統一 されたようです。互換性の問題と処理効率の問題だと 思います。 ワードマシンが存在した大きな意味はアドレス空間の 拡大だと思います。 32ビット命令→64ビット命令と命令が扱うアドレスが 拡大するにつれ、バイトアドレスでも十分なアドレス 空間が得られ、バイト処理も効率よく出来ます。 しかし、考えようでは現時点で、16ビットや32ビットの 64ビットデータを扱う命令が存在しますので、 アドレッシングは、8ビット、16ビット、32ビット、64ビ ット単位を併用していると言えます。 32ビットデータの命令に0,4,8,12など4の倍数でないアド レスを与えると、命令の速度が落ちるのが一般でしょう。 なのでコンパイラは、データ領域が4の倍数のアドレスに なるように調整しています。
その他の回答 (3)
- don_go
- ベストアンサー率31% (336/1059)
(1) コンピュータ内部では、基本的に2進数が使用されていますが 2進数では人間にとっては理解するのが難しいので、ビットを 組み合わせて理解し易い様にしています。 2進数で4ビットで表す事ができるのが、0000~1111で、これは 10進数にすると0から15までの値となり、10から15にはAからFを 割り当てて、F(15)の次は桁あがりして10とする16進数が使用 されます。 この4ビットを2組使用したものが8ビットになります。 #00からFFで表記されます。 9ビットや7ビットにした場合、4ビット+5ビットまたは3ビット +4ビットとなり上位桁と下位桁の進数が異なる事により計算が 困難になってしまいます。 #5ビットの場合は32進数となり、これも理解しづらくなる原因 #となります。 (2) 一つのアドレスの値を8ビットから16ビットにした場合、8ビット 以内で済むデータでも16ビットのメモリが必要となります。 メモリの容量当たりの単価は安くなってきてはいますが、無駄な 領域を増やす事は結局、処理能力の低下につながります。
お礼
回答ありがとうございます。助かりました。
- hs001120
- ベストアンサー率60% (473/788)
(1)歴史的な慣習です、その昔には3bitや4bit、6bitを最小単位とする物も存在していました。 http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html (2)同時にアクセスするビット数を増やせば一回でアクセス可能なデータが増える。という発想は間違っていないのですが、 例えば32bitのデータにアクセスするとき それを、人間が8bitデータ×4アドレスと定義するか、1つのアドレスに32bitのデータと定義するかは 単に人間の"認識"上の都合に過ぎないです。 人間が4つのアドレスと認識しているからといって、 必ずしも実際の処理において1バイトづつ4回に分けてアクセスしている と言う事ではありません。
お礼
回答ありがとうございます。少しCPUの知識が増えました。
- notnot
- ベストアンサー率47% (4900/10358)
(1) 必然性はありません。私が知っているだけで、1,4,8,12,16,32,36などのビット数のものがあります。あとは扱うデータの大きさとの整合性の問題で効率の善し悪しがあります。1ビットとか256ビットだと効率が悪いのはわかるでしょう。 主に扱うデータ長と「1アドレスのデータ長」が等しい物をワードマシン、扱うデータ長が何種類かありどれも「1アドレスのデータ長」の整数倍の物をバイトマシンと言います。後者の場合の「1アドレスのデータ長」をバイトといいます。言葉の意味からは1バイト=8ビットとは限らないのですが、現在は事実上そうなっています。 8ビットなのは、2の累乗が処理に都合がいいからです。4ビットだと1文字を表せない。16ビットだと欧米文字を表すと無駄が出る(2文字詰め込むと処理が面倒)。Unicodeが40年前にあれば事情は違っていたかもしれませんね。 (2)逆です。CPUの性能向上を有効に生かすためにビット長が長くなったのです。また、現在のCPUでは連続したアドレスのデータを一度にアクセスできますので、1アドレスの語長をふやしても速度の向上はありません。
お礼
回答ありがとうございます。文字の処理効率があるのですね。 CPUの性能向上を有効に生かすためにビット長が長くなったのです。また、現在のCPUでは連続したアドレスのデータを一度にアクセスできますので、1アドレスの語長をふやしても速度の向上はありません。 貴重な情報ありがとうございます。
お礼
回答ありがとうございます。バイトマシンなる単語は初めて聞きました。