• ベストアンサー

メモリについての質問

基本的なことですが、自分では解決できないので質問させてもらいます。 (1)1つのアドレスは8ビットときまってますが、8ビットである必然性はあるのでしょうか?別に9ビットでも7ビットでもいいと思うのですが、ただの歴史的な慣習でしょうか? (2)CPUの性能はアクセスできるビット数が16,32と上がってますが、一つのアドレスのメモリを2倍(8→16ビット)にしたら同様にコンピュータの性能が上がると思うのですが、どうしてそうならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

(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の倍数のアドレスに  なるように調整しています。

szatmari
質問者

お礼

回答ありがとうございます。バイトマシンなる単語は初めて聞きました。

その他の回答 (3)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.4

(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ビットのメモリが必要となります。 メモリの容量当たりの単価は安くなってきてはいますが、無駄な 領域を増やす事は結局、処理能力の低下につながります。

szatmari
質問者

お礼

回答ありがとうございます。助かりました。

  • hs001120
  • ベストアンサー率60% (473/788)
回答No.3

(1)歴史的な慣習です、その昔には3bitや4bit、6bitを最小単位とする物も存在していました。 http://blogs.itmedia.co.jp/pina/2006/06/8_bf7b.html (2)同時にアクセスするビット数を増やせば一回でアクセス可能なデータが増える。という発想は間違っていないのですが、 例えば32bitのデータにアクセスするとき それを、人間が8bitデータ×4アドレスと定義するか、1つのアドレスに32bitのデータと定義するかは 単に人間の"認識"上の都合に過ぎないです。 人間が4つのアドレスと認識しているからといって、 必ずしも実際の処理において1バイトづつ4回に分けてアクセスしている と言う事ではありません。

szatmari
質問者

お礼

回答ありがとうございます。少しCPUの知識が増えました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

(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アドレスの語長をふやしても速度の向上はありません。

szatmari
質問者

お礼

回答ありがとうございます。文字の処理効率があるのですね。 CPUの性能向上を有効に生かすためにビット長が長くなったのです。また、現在のCPUでは連続したアドレスのデータを一度にアクセスできますので、1アドレスの語長をふやしても速度の向上はありません。 貴重な情報ありがとうございます。

関連するQ&A