在结构体中,哪个数据类型最大,就以哪个数据类型对齐,比如,最大的数据类型为uint32_t,那么结构体就以4字节对齐,没有对齐的数据按4字节来算。
//测试代码:
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
struct SIMPLE
{
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
uint8_t e;
uint32_t f;
}data;
int main(int argc, char const *argv[])
{
/* code */
printf("sizeof(struct) = %d\n", sizeof(data));
return 0;
}
运行结果:

分析:
这里最大的数据类型占了4个字节,因此结构体为4字节对齐,数据a,b,c,d算起来已经有4个字节了,但是数据e只有1个字节,为了字节对齐,因此数据e也会变成4个字节。
内存分布:
结合下面的内存分布图会更加清晰。

网友评论