C语言内存字节对齐小结

C语言内存字节对齐小结

两句话
(1)各成员变量在结构体(类)中的地址偏移是自身大小(或与指定对齐系数之间较小者)的整数倍;
(2)结构体(类)大小是最大成员变量(或与指定对齐系数之间较小者)整数倍;

环境
在64位机器环境。
1、举例一:

struct AA{

    char a;

    int b;

    char c; 

}aa;

结果,sizeof(aa)=12
分析:
a占1Byte;b占4Byte,b的偏移为自身大小(4Byte)整数倍,所以a后面有3Byte补齐,所以到b有8Byte;c占1Byte,此时总共9Byte。又因为总数为最大成员(b,占4Byte)整数倍,所以后面又有3Byte补齐,总共12Byte。

2、举例二:

struct AA{

    char a;

	char c; 

    int b;    

}aa;

sizeof(aa)=8

3、举例三:

#pragma pack(2)//取最小

struct AA{

    char a;

    int b;

    char c; 

}aa;

sizeof(aa)=8

如果pragma pack和__attribute__
同时指定呢?以__attribute__ 的为准。

需要说明的是,不管pragma
pack和__attribute__如何指定,结构体内部成员的自对齐仍然按照其自身的对齐值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值