2011-01-05 22 views
3

バイト(8ビット)&に格納できる最小値がメモリ内のビット(1ビット)でないのはなぜですか? 偶数ブール値はバイトとして格納されます。我々はCPU上のレジスタのように、32または64ビットに最も小さい数字を突きつけますか?格納できる最小値はバイト(8ビット)でビット(1ビット)ではないのはなぜですか?

+2

1ビットを格納することはできませんが、コンパイラの最適化を使用して、複数のビット/ブール値を共有メモリ空間にまとめることができます。これはビットフラグや列挙によく使用されます。あなたはまだ1ビットを保存しませんが、8ブール値の8バイトの格納を避けることができます。 –

答えて

1

プロセッサアクセスの基本的な方法は、使用可能な最小のレジスタのサイズに制限されています。ほとんどのアーキテクチャでは、そのサイズは8ビットです。これらの小さな部分を使うことができます。例えば、Cは、特定のビット長だけである必要のあるフィールドを組み合わせることを可能にする構造体のビットフィールド機能を持っています。アクセスは依然としてバイト全体を読み取る必要があります。

古いエキゾチックなアーキテクチャの中には、実際には「ワードサイズ」が異なっていたものがあります。これらのマシンでは、10ビットが共通のサイズである可能性があります。

最後に、プロセッサはほとんど常に後方互換性があります。例えば、インテルは、386以降の完全な命令互換性を維持しています。 386用にコンパイルされたプログラムを使用すると、i7プロセッサ上で実行されます。ワードサイズを変更すると互換性が失われます。したがってですが、製造元はこれを行うことはありません。

2

コンピュータはメモリをバイトレベルで処理するため、バイトより小さいものはアドレス指定できません。

5

ハードウェアはブロック(バイト、それ以降のワード、およびワード)でデータを読み取るように構築されています。これにより、個々のビットにアクセスするよりも効率が高くなり、より多くのアドレシング範囲も提供されます。したがって、ほとんどのデータは少なくともバイト境界に揃えられています。バイトではなくビットシーケンスで動作するエンコーディングが存在しますが、非常にまれです。

今日では、データはほとんどの場合、とにかくdword(32ビット)境界にアライメントされています。さらに、いくつかのハードウェア(例えばARM)は、整列していないマルチバイト変数にアクセスすることができない。すなわち、16ビットワードは、ワード境界を「交差」することができない - 例外がスローされる。

関連する問題