结构体字节对齐

  • test1
typedef struct node1
{
    int a;
    char b;
    short c;
}S1;
|---------int----------|   4字节
|char|----|--short--|   4字节
  • test2
typedef struct node4
{
    bool a;
    S1 s1;
    short b;
}S2;
|-------bool--------|  4字节
|-------s1----------|  8字节
|-------short-------|  4字节
因为s1占8字节,而s1中最长数据类型为int,占4个字节,bool类型1个字节,short占2字节,因此以4字节对
  • test3
typedef struct node5
{
    bool a;
    S1 s1;
    double b;
    int c;
}S3;
|--------bool--------|    8字节
|---------s1---------|    8字节
|-------double-----|    8字节
|----int----|---------|     8字节
  • #pragma pack(4)
typedef struct node5
{
    bool a;
    S1 s1;
    double b;
    int c;
}S4;
|-----------a--------|   4字节
|--------s1----------|   4字节
|--------s1----------|   4字节
|--------b-----------|   4字节
|--------b-----------|   4字节
|---------c----------|    4字节
  • 位域
<pre name="code" class="plain">struct A
{    
    char t:4;  
    char k:4;
    unsigned short i:8;
    unsigned long m;
};
 
 
 char t:4; 4位 
 
char k:4; 4位
unsigned short i:8; 8位
unsigned long m; // 偏移2字节保证4字节对齐,共8字节
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值