结构体内存分配
结构体变量大小是它所有成员的大小之和,因为结构体
是所有成员的集合,但是对于不同的类型而言结构体开
辟内存的字节单位也不同。
规则1:以多少个字节为单位开辟内存
给结构体变量分配内存的时候,会去结构体变量中找基
本类型的成员
哪个基本类型的成员占字节数多,就以它大大小为单位
开辟内存.
在gcc中出现了double 类型的,例外
1:成员中只有char 型数据1,以1字节为单位开辟内
存
2:成员中出现了short int 类型数据,没有更大字节数
的基本类型数据
以2字节为单位开辟内存
3:出现了int float 没有更大字节的基本类型数据的时
候以4字节为单位开辟内存。
4:出现了double 类型的数据以8字节为单位开辟内存。
struct stu{
short int a;
char b;
}
int main()
{
struct stu boy;
printf("%d",sizeof(boy));
}
正常来讲他们的和为3即输出为3,但是按照规则一则是以short int的2来开辟内存即为2+2=4。剩下的以此类推。
规则2:字节对齐
1:char 1字节对齐,即存放char 型的变量,内存单元的编号是 1的倍数即可。
2:short int 2字节对齐,即存放short int 型的变量,起始内存单元的编号是 2的倍数即可。
3:int 4 字节对齐,即存放int 型的变量,起始内存单元的编号是 4 的倍数即可。
4:long int 在32位平台下,4 字节对齐,即存放long int 型的变量,起始内存单元的编号是 4
的倍数即可。
5:foat 4 字节对齐,即存放foat 型的变量,起始内存单元的编号是4 的倍数即可。
6: double 8字节对齐。
struct stu{
short int a;
char b;
int c;
}
int main()
{
struct stu boy;
printf("%d",sizeof(boy));
}
如果只按照规则一即为3*4=12,但实际是4+4=8,前两个并入一个四字节,剩下的以此类推。