我看到了无数这样的问题:“我不喜欢填充,怎么关闭它?”但是我还没有找到关于强制编译器提供额外填充的任何信息。
我现在遇到的具体情况是:
struct particle{
vect2 s;
vect2 v;
int rX;
int rY;
double mass;
int boxNum;
};
如何让结构体 struct {double x; double y;} vect2
对齐到16字节边界,以便使用SSE2?添加额外的int
后,结构体大小从48字节变为56字节,导致段错误。有没有编译器指令能够自动将结构体对齐到16字节或者在其内部填充字节使其成为16字节的倍数?我知道可以手动实现(例如追加一个额外的 char[12]
),但我更想告诉编译器(最好是GCC或ICC兼容版本),以后如果更改了结构体就不用再手动修改。
alignas
来实现这个目的。 - ildjarnvect2
和__m128
进行联合吗?这样可以指示gcc在堆栈上将你的结构体对齐到16字节。 - ecatmur