主な質問:最小のアドレス可能なメモリブロックの正確な用語は何ですか?
別の方法でそれを扱うために別の答えを追加します。電子ハードウェアでは、これをビット(2進数)と呼びます。これは、任意の2つの値を表すことができるエンティティです。私たちは通常0と1の観点から考えますが、3または4、365または266、-3または-4、さらには25または37の場合もあります。
これらの値を表すために任意の信号システムを使用できます-フラグアップ、フラグダウン、アイオープン、アイクローズ、+ 5v、-5v。それは重要ではありません。
重要なことは、哲学的に私たちは最小の区別できる量の情報を表しているということです。これは、オン、オフ、またはtrue、false、またはup、down、または0、1(2つの別個の状態を区別するもの)です。これらの値を上記の信号システムや他の多くの信号システムにマッピングできます。
さて、問題は、どのようにしてこのような少量の情報を個別にテストおよび設定できるかということです。以前の回答で述べたように、B1700はその最小量の情報に直接対処することを選択しました。
ただし、ほとんどのマシンは、より大量の情報のみを扱うことにしました。単一のアドレスを持つ4ビットのグループを考えてみましょう。したがって、ロケーションで1011の値を取得した場合、左から2番目のビットをテストするにはどうすればよいでしょうか。マスクを使用します。1011と0100は2番目のビットだけをテストします。では、2番目のビットを1に設定するにはどうすればよいでしょうか。わずかなCPU演算では、値は15または1111になると言われているため、実際には1ビットしか設定していなくても、4ビット全体がメモリに書き戻されます。
現在、これはほとんどのアプリケーションに役立ちません。ほとんどのアプリケーションは、データ、情報、アップ、ダウン、true、false、open、shutを表します。
私たちは次のようなことを言いたいです:
開いている場合...その他...終了
または、より大きなエンティティに適用する可能性が高くなります。
ドアが開いている場合-おそらく 'door.open' ...そうでなければ... end
「ドアが開いている」は、階層型アドレス指定を示しています。メインシステムのアドレス指定はエンティティドアを提供し、ドアには、オープン(およびその他の属性)へのアクセスを提供する独自のアドレス指定があります。
ほとんどのセットには、3つ以上の可能な値もあります(1つの値を持つセットは変更されないため、表現すら必要ないため、ビットはゼロです)。これらについては、(黄、緑、青、紫のもや、赤)のようなセットを列挙しています。これらはセットとタイプを定義し、必要なビットの正確な数は値の数(log2(値の数))によって与えられます。
したがって、最適なアドレス指定は、アプリケーションで使用されるエンティティのサイズ(おそらく、可変サイズのエンティティであっても)に依存します。しかし、ほとんどのハードウェアでは、そのようなアドレスはハードウェアが定義する固定サイズに変換する必要があります。もちろん、これは時間の面でコストがかかる可能性があります。このようなシステムが上記のようにビットをテストおよび設定するコードを生成するのと同じように(ビットが直接アドレス指定できない場合)、これはプログラマではなく、自動トランスレータ(コンパイラまたはインタプリタ)が行うことでもあります。
ここでの重要なポイントは、電子工学の観点から考えることではありません。電子計算には、他の方法では実行できなかった計算を実行できる魔法はありません。魔法はスピードだけです。そのため、ビット、バイト、ワード、ハードウェアアドレス指定メカニズム(ポインタ)などの低レベルの抽象化は、実際にはそれほど役に立ちません。