struct size 12,struct object align to 8,可能吗?

时间:2017-03-24 22:15:17

标签: c++ visual-c++

我想定义一个结构,以便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

2 个答案:

答案 0 :(得分:4)

对象的大小必须是其对齐要求的倍数。 8不是因子12.因此,不能使用大小为12的类型,并且对齐为8。

您可以使用alignas说明符请求比类的子对象更严格的对齐,并且类的大小将相应增加。您的示例类将填充为16个字节。

答案 1 :(得分:0)

C ++的基本要求是数组T[N]的大小为N * sizeof(T),并且每个数组元素都正确对齐T。这意味着一种类型的对齐必须将其大小分开。