ほとんどのコンピュータがビットアドレス指定可能ではなくバイトアドレス指定可能であるのはなぜですか?
B/bアドレス指定可能プロセッサが単一のB/bのレベルで動作できることを意味します。
ブール値のサイズは1ビットです。
整数の単一ビットに直接アクセスできます(シフトのような汚いハックは必要ありません)。
???
ハードウェアがビットアドレス指定できない理由は、そのレベルの粒度に対応するためのコストと複雑さが正当化されないためです。より正確に対処するには、より多くのワイヤが必要です。
多くのコンピューターは、実際にはバイトアドレス指定もできません。彼らは大きなチャンクでメモリを移動する傾向があり、64バイトが一般的です。
プロセッサでは、便宜上、特定のバイトを読み書きできます。それらはあなたのための実際のアドレス指定に変換します。つまり、あなたが後のバイトを含む移動するブロックを計算します。
バイトが適切なサイズになるように選択された理由は、主に歴史的なものです。これは、メモリをアドレス指定するために必要なWordのサイズと、無駄になる可能性のあるメモリとの間の賢明な妥協でした。初期の頃は、特定のサイズのWordに対して効果的に対処できるメモリ量の8倍の違いが重要でした。現在、64ビットシステムではそれほどではありませんが、変更によって必要となる大きな後方非互換性を引き起こすことによる明らかな利点はありません。
ここにいくつかの考えがあります:
ほとんどのデータは8ビットの倍数で格納するのに非常に適していると思います。例えばASCII、8、16、32、64ビットの小さな値。したがって、ビット単位のアドレッシングを追加することで得られる数は非常に少なくなりますが、CPUの複雑さ、メモリの処理、キャッシュなどが得られます。
ビットアドレス可能なアーキテクチャがありました。たとえば、CDC Cyber 200シリーズシステム。 (48ビットアドレス)
しかし、これには理由がありました。前述のマシンはベクトル(SIMD)マシンであり、ビット操作はベクトル演算の制御と「スパースベクトル」の表示に非常に重要であり、要素のストレージは要素がゼロ以外の場合にのみ割り当てる必要があります。 Cyber 200には、ビット操作、マージと選択、および制御ビットベクトルを生成する操作の完全なセットがありました。
しかし、ベクトルマシンは通常のスカラーマシンとは非常に異なった品種であり、アドレス指定でバイトまたはワードの粒度で「実行」できます。
(限界まで)可変サイズのワードを備えたビットアドレス指定可能なコンピュータがありました。(たとえば)特許US4467443を参照してください。
ただし、より多くの仮定を行うことができ、柔軟性が低いほど、RAMをより速く作成できます。バイト(または16ビットワード、32ビットワード、または16バイトメモリライン)のみをフェッチすることがわかっている場合は、これをすべて並列に接続できますが、それは困難です(不可能ではありません)。より柔軟な設計を行うために。
フェッチされたWordのサイズがアドレス指定の細分性を決定するCPUもあります。したがって、バイトは任意のバイトアドレスに配置でき、16ビットワードは偶数アドレスに配置し、32ビットワードは4の倍数のアドレスに配置する必要があります。