16 ビットの量をアドレス指定できる場合は、16 ビット アラインされた量を確実に読み取ることができます。おそらく、バイトアドレス指定可能なアドレス空間があると想定していると思います。できない場合がありますので、注意が必要です。特定の (そして現在の) 例はわかりませんが、一部のアーキテクチャ (特定の組み込み型) がバイトまたは 16 ビットでさえもアドレス指定できない可能性があることは間違いなく考えられます。
それは実際に問題ですか?たまたまワード アドレス指定が可能なマシンを使用している場合、アドレス指定可能なワード サイズが 32 ビットの場合、実際には 16 ビットのみをアドレス指定することはできません。ただし、sizeof には注意してください。
あなたは amd64 (x86-64) について尋ねました。メモリ アライン アクセスに制限はありませんが、アラインされていないアクセスのためにサイクルを失う可能性があります。整列されていないアクセスは決して移植可能ではないことに注意してください。
更新: アラインされたアドレスとは何ですか?
タイプ T のアラインされたアドレスは、sizeof(T) の倍数である任意のアドレスです。ここで、sizeof(T) は、値が占めるアドレス指定可能な単位の数です。たとえば、バイト アドレス指定可能な空間に 32 ビットのワード サイズがある場合、アラインされたアドレスは少なくとも 4 の倍数ごとになります。ただし、マシンが 16 ビット単位でアドレス指定できる場合は、 2 は、32 ビット量のアラインされたアドレスになります。
16 ビット量を読み取る場合、次の 3 つのケースがあります。
- バイト アドレス指定: 奇数アドレスは位置合わせがずれている可能性があります。アーキテクチャは、これらを整列したものとして自由に扱うことができますが、そうではありません。
- アドレス可能な単位は 16 ビットです。すべてのアドレスは 16 ビット量に合わせて調整されます。
- アドレス可能な単位はより大きく、実際には 16 ビットの量はありません。彼らは静かに大きくなっています。
更新 2: アドレス 0x2 から 16 ビットを読み取る CPU はありますか (アドレス範囲が有効であると仮定して)、バス エラーが発生しますか?
アドレス可能単位が 8 ビット未満でない限り、そのような CPU は存在しません。その理由は、アドレス 0x2 のアラインメントが 2 つのアドレス可能単位であるためです。アドレス指定可能な単位が 8 ビットの場合、16 ビットで整列されます。
さらに、16 ビットという意図により、アドレス可能なユニット サイズの奇妙な値は除外されます。16 ビット値がアーキテクチャの実数である場合、アドレス指定可能な単位は 16 の因数でなければなりません。したがって、1、2、4、8、または 16 ビットしかあり得ません。それがたまたま高い場合、アライメントは自明に満たされます。
8 ビット未満をアドレス指定するアーキテクチャは問題に値しないため、アドレス 0x2 が 16 ビット量のアライメントされたアドレスになることはほとんど保証されています。