1. 大端小端
- 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
->Intel
- 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中
-> IBM
2.结构体的对齐
2.1 结构体对齐的原则
http:\/\/www.cnblogs.com\/motadou\/archive\/2009\/01\/17\/1558438.html
数据类型自身的对齐值:对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
- 数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
2.2 例子
32位系统中:char占一个字节;int占四个字节;double占八个字节。
例子1
struct my_struct{
char a;
long long b;
};
没有#pragma ;1+8=9
字节对齐:1+7+8=16
结构体对齐:无#p,按照结构体,最大值,8对齐
16是8个倍数
- 例子2
#pragma pack(2)
struct my_struct{
char a;
long long b;
};
# pragma
带有#pragma;1+8=9
对齐a和b;sum=1+8+1(pargma的对齐)=10字节
带有#Pargma的结构体,按pargma对齐
10是2的倍数,不需要再对齐
- 例子3
struct my_struct{
char a;
double b;
char c;
};
无#pragma;1+8+1=10
对齐a和b;sum=1+8+1+7=17字节
最大字节的,8字节
17不可以整除8
3*8-17=7
综合:是24B