私は64ビットの値を持つ構造体を持っているとします。もちろん、64ビットシステムでは、高速読み書きのために64ビット境界にその値を揃えたいと考えています。アラインメントの考慮事項と動的割り当て
この構造体がスタックにプッシュされたり、データセクションに格納されている場合、この値が64ビットになるように構造体を整列させることをコンパイラが行うことをお勧めします。
しかし、この構造をmallocや友人から得たメモリにオーバーレイすると、私はそれらが整列を保証しないと信じています。そのため、64ビットの値が整列しない可能性があります。
私自身のアロケータを使用しても、aligned_mallocまたは代替を使用しても、これを適切に処理する方法は不明です。私は、コンパイラが自分の構造をどのようにパックすることを選択したか分かりません。そのため、アラインメントをどうやって確保するか分かりません。
Ofcには、多くの8,16,64,128などがあります。この構造体のビット値はすべての整列要件を満たしたいと考えています。
標準によれば、mallocはプラットフォームとターゲットのすべてのタイプの配置要件を満たすアドレスを記述します。構造体を持っていても、それはすべてのフィールドのアライメントの最大値になります。それも問題ではありません。 –
_私は彼らがアラインメントを保証しないと信じています_ ...なぜ..? – LPs
http://stackoverflow.com/a/28107740/1606345 –