x86 コンパイラとの競合

x86 コンパイラを使用してアプリケーションをコンパイルする場合、4 バイトを超えるデータ型はスタックに自動的にアライメントされません。 x86 コンパイラのアーキテクチャは 4 バイト アライメント スタックであるため、4 バイトを超えるデータ (たとえば、64 ビット整数) は、8 バイト アドレスに自動的にアライメントできません。

アライメントされていないデータを操作する場合、2 つの注意事項があります。

  • アライメントされた場所にアクセスするよりも、アライメントされていない場所にアクセスする方が長い時間がかかる場合があります。

  • アライメントされていない場所は、インタロックされた操作では使用できません。

より厳密なアライメントが必要な場合は、変数宣言で __declspec(align(N)) を使用します。 これにより、コンパイラは、仕様に合わせてスタックを動的にアライメントします。 ただし、実行時にスタックを動的に調整すると、アプリケーションの実行速度が遅くなる場合があります。

参照

参照

型とストレージ

align (C++)