在GCC中你可以省略对齐系数,只要求编译器将类型与你正在编译的目标机器的最大有用对齐方式对齐:
struct S {
short f[3];
} __attribute__ ((aligned));
如何使用 __ declspec 对Visual Studio C ++编译器执行相同的操作? 所有可以做的就是明确提供对齐大小,例如:
__declspec(align(#)) // where # is the alignment size in bytes
并且MSDN说:
如果没有 __ declspec(align(#)),Visual C ++通常会根据目标处理器和数据大小在自然边界上对齐数据,在32位处理器上最多可达4字节边界,以及64位处理器上的8字节边界。类或结构中的数据在类或结构中以最小的自然对齐和当前打包设置(来自#pragma pack或 / Zp 编译器选项)对齐。
这意味着在这种情况下最大有用对齐是自然边界?