「パディングをオフにする方法は好きではありません」という形式の無数の質問を見てきましたが、コンパイラに追加のパディングを強制的に提供することについてはまだ何も見つけていません。
私が持っている特定のケースは次のようになります
struct particle{
vect2 s;
vect2 v;
int rX;
int rY;
double mass;
int boxNum;
};
単純vect2
なstruct {double x; double y;} vect2
. SSE2 を使用するには、16 バイト境界に揃えられた double のペアをロードできる必要があります。これは、extra を追加しint
て構造体のサイズを 48 バイトから 56 バイトにプッシュするまで機能していました。その結果、セグメンテーション違反が発生します。
「この構造体を 16 バイトの倍数にするためにパディングする」または「この構造体は 16 バイトのアラインメントを持つ」というコンパイラ ディレクティブを使用できますか? 私は手動でそれを行うことができることを知っています(たとえば、追加のchar [12]を追加します)が、実際にはコンパイラ(GCC、できればICC互換)に伝えるだけで、手動で変更する必要はありません将来的に構造化します。