结构体内存分配

结构体内存分配
结构体变量大小是它所有成员的大小之和,因为结构体
是所有成员的集合,但是对于不同的类型而言结构体开
辟内存的字节单位也不同。
规则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,前两个并入一个四字节,剩下的以此类推。
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值