アラインメントは、データのサイズとアドレス指定に関係しています。ほとんどの命令セット/ソフトウェアのアドレス指定はバイト単位です。0、1、2、3 はすべて有効なバイト アドレスです。アクセスしているメモリシステムまたは周辺機器が「バイトアドレス指定可能」であると仮定すると、基本的に個々のバイトを書き込むことができ、通常は任意のアドレス値を使用できる命令があります。アライメントは、1 バイト、2 バイトを超えると開始されます。アライメントされている場合は、アドレスの lsbit が 0 であり、アライメントされていない場合は、1 であることを意味します。4 バイト、32 ビット量、下位 2 ビットが 0、整列、1 つまたは両方が 0 でない、整列されていない、など。モジュロ 4 = 0 が 4 バイト境界に整列するアドレスが必要なモジュロと考えることができます。
通常、ソフトウェア エンジニアとして、アドレス 5 で 10 バイトを取得する必要がある状況に意図的に身を置くことはありません。おそらく、10 しか使用しない場合でも、0x4 で 12 バイト、0x0 で 16 バイト、またはこれらの行に沿って何かを行うでしょう。それらのうち、より論理的に整列します。外部の影響、ネットワーク パケット、ファイル システム、共有メモリ、ハードウェアなど、コンパイル ドメインをまたぐときはいつでも、これに対処し、それに応じて行動しなければならない場合があります。10バイトは、これらのバイトを別の同等に悪いアドレスにコピーしようとしているか、単に読み書きするかによって異なります。読み取る場合は、おそらくアドレス 0x4 で 12 バイトを読み取って、それで完了したいだけです。適切に書き込めば、10 個すべてをナイス ループで実行するか、一度に 1 バイトずつ展開できます。0x5 に 1 つ、0x6 に 2 つ、0x8 に 4 つ、0xC に 2 つ、0xE に 1 つを書き込むことができます。または 0x5 に 1 つ、ループまたはアンロールされた 4 つの 16 ビット値が 0x6 で始まり、次に 0xE で 1 バイト。等。
読み取りと言ったので、0x4 で 3 つの 32 ビット量を読み取るか、0x0 から始まる 2 つの 64 ビット量を読み取ることができます。それは、データをどうするつもりか、どの命令セットを使用しているかなどに大きく依存します。
整列と非整列について疑問がある場合は、上記の書き込みで述べたように、次のことを行うことができます
8 bit access at 0x5
16 bit access at 0x6
32 bit access at 0x8
16 bit access at 0xC
8 bit access at 0xE
ただし、最も効率的ではない可能性のある読み取りについては、私が言い続けているように。書き込みの場合、32 ビットまたは 64 ビットの量、または上記の組み合わせで書き込みを読み取り変更できます。