ワードアドレスメモリとバイトアドレスメモリとはどういう意味ですか?
2 に答える
これは通常、基盤となるハードウェアのコンテキストで使用されます。最近のほとんどのシステムには、バイトアドレスのメモリがあります。つまり、メモリ内の各バイトを個別にアドレス指定してフェッチすることができます。
一部のシステムには、ワード アドレス メモリがあり、ポインタ レジスタには個々のワードのアドレスが含まれています。さらに、メモリがフェッチされるたびに、ワード全体がフェッチされます。特定のバイトが必要な場合、コンパイラは単語をフェッチし、そこから必要なバイトを取得するように手配します。
そのようなシステムでは、ポインターで reinterpret_cast を使用することは非常に危険であることに注意してください。これは、実装がおそらく (効率のために) ワード アライメントされたものへのポインターをワード ポインターとして保持し、バイト アライメントされたものへのポインターをバイト ポインターとして保持するためです。したがって、メモリが次のようになっているとします。
word X : aa ab ac ed
word X+1: ba bb bc bd
ワード X へのポインタには X が含まれますが、aa へのバイト ポインタには X*4 が含まれます
reinterpret_cast<word *>(&aa)
X*4 という単語ポインタが表示されますが、これは恥ずかしいほど間違っています。
バイト アドレスのマシンでは、ワード ポインターとバイト ポインターの両方に X*4 が含まれるため、2 つの間で reinterpret_cast を実行しても安全です (つまり、未定義の動作で混乱を招きます)。
トムに同意します...ワードアクセスメモリでは、メモリにアクセスすると4バイト全体を持つことができます(AHBバスのように)このタイプのメモリの場合、バイトにアクセスしようとすると、未定義の動作が発生します