我想定义一个结构,以便sizeof(myStruct) = 12
和__alignof(myStruct) = 8
。
struct myStruct{
int32_t a;
int32_t b;
int32_t c;
};
这可能吗?
目前我必须手动执行以下操作:
__declspec(align(8)) myStruct str1; // Assume str1 start at 0x00
__declspec(align(8)) myStruct str2; // str2 address is 0x10
__declspec(align(8)) myStruct str3; // str3 address is 0x20
double abc; // abc address is 0x2C
__declspec(align(8)) myStruct str4; // str4 address is 0x38
答案 0 :(得分:4)
对象的大小必须是其对齐要求的倍数。 8不是因子12.因此,不能使用大小为12的类型,并且对齐为8。
您可以使用alignas
说明符请求比类的子对象更严格的对齐,并且类的大小将相应增加。您的示例类将填充为16个字节。
答案 1 :(得分:0)
C ++的基本要求是数组T[N]
的大小为N * sizeof(T)
,并且每个数组元素都正确对齐T
。这意味着一种类型的对齐必须将其大小分开。