c-language: 结构体

1. 大端小端

  • 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

->Intel

  • 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中

-> IBM


2.结构体的对齐

2.1 结构体对齐的原则

http:\/\/www.cnblogs.com\/motadou\/archive\/2009\/01\/17\/1558438.html

  1. 数据类型自身的对齐值:对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。

  2. 结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。

3.指定对齐值:#pragma pack (value)时的指定对齐值value。

  1. 数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

2.2 例子

  • 32位系统中:char占一个字节;int占四个字节;double占八个字节。

  • 例子1


struct my_struct{

    char a;

    long long b;

};
  1. 没有#pragma ;1+8=9

  2. 字节对齐:1+7+8=16

  3. 结构体对齐:无#p,按照结构体,最大值,8对齐

  4. 16是8个倍数

    • 例子2

#pragma pack(2)

struct my_struct{

 char a;

 long long b;

};

# pragma
  1. 带有#pragma;1+8=9

  2. 对齐a和b;sum=1+8+1(pargma的对齐)=10字节

  3. 带有#Pargma的结构体,按pargma对齐

  4. 10是2的倍数,不需要再对齐

    • 例子3

struct my_struct{ 

    char a; 

    double b;

    char c;

};
  1. 无#pragma;1+8+1=10

  2. 对齐a和b;sum=1+8+1+7=17字节

  3. 最大字节的,8字节

  4. 17不可以整除8

  5. 3*8-17=7

综合:是24B

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值