0
我想了解结构如何对齐。根据this source,我会期望结构C结构对齐
#include<inttypes.h>
#include<stdio.h>
typedef struct {
uint16_t a;
uint16_t b;
uint32_t c;
} test_struct;
int main (int argc, char const *argv[])
{
printf("%lu\n", sizeof(test_struct));
return 0;
}
大小为12个字节。在我的例子中只需要8个字节。由于它包含一个32位整数,我认为它应该对齐到4个字节,显然情况并非如此。
环顾四周后,我发现这个this answer建议,只有成员本身需要对齐。
这完全解释了我的结构体的大小,但是如何与我的第一个源声明“一个结构实例将具有最广泛标量成员的对齐方式”相对应?这是错的还是我错过了什么?
两个' uint16_t'类型对齐,占用4个字节; 'uint32_t'对齐4个字节;总数应该是8个字节。每种类型都必须与使用其自己的适当对齐的开始对齐。 –
如果您已将结构顺序更改为'a,c,b',您将得到12,因为需要在'a'和'c'之间填充/对齐2个字节以符合'c'的需要4字节对齐。 –
该结构对齐到4个字节。你为什么认为它不是? – melpomene