结构体内存大小对齐原则
结构体中成员变量分配的空间是按照成员变量中占用空间最大的来作为分配单位,同样成员变量的存储空间也是不能跨分配单位的,如果当前的空间不足,则会存储到下一个分配单位中。
补充:
- 结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
- 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)。即结构体成员的末地址减去结构体首地址(第一个结构体成员的首地址)得到的偏移量都要是对应成员大小的整数倍。
- 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在成员末尾加上填充字节。
结构体变量的初始化
struct student
{
int mum;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
位域
struct bs {
unsigned a : 4;
unsigned : 4; /* 空域 */
unsigned b : 4; /* 从下一内存单元开始存放 */
unsigned c : 4
};
- 空域不可使用
本文深入解析了结构体内存对齐原则,包括成员变量如何按最大单位分配空间,以及编译器如何通过内部填充确保成员偏移量为整数倍。同时介绍了结构体初始化方式和位域的概念。
1046

被折叠的 条评论
为什么被折叠?



