您的位置:首页 > 其它

sizeof 数据对齐问题

2015-05-28 10:43 141 查看
(1)struct A

{

char t:4;

char q:4; //1

// unsigned int i:8;

// unsigned int j:8;

// unsigned int a:8;

// unsigned int b:8;

// unsigned int c:8;

// char k:4;

// unsigned int m;

// double n;

};

sizeof(A)=1; 两个4位 char数据组成一个字节

(2)struct A

{

char t:4;

char q:4; //1

unsigned short r:8; //2 对齐组合成4

unsigned int i:8;//4

// unsigned int j:8;

// unsigned int a:8;

// unsigned int b:8;

// unsigned int c:8;

// char k:4;

// unsigned int m;

// double n;

};

sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐为8个字节

(3)struct A

{

char t:4;

char q:4; //1 对齐成4

unsigned int i:8;//4

// unsigned int j:8;

// unsigned int a:8;

// unsigned int b:8;

// unsigned int c:8;

// char k:4;

// unsigned int m;

// double n;

};

sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐为8个字节

(4)struct A

{

char t:4;

char q:4; //1 对齐组合成4

unsigned int i:8;

unsigned int j:8;

unsigned int a:8;

unsigned int b:8; //4 这四句话组合成4

// unsigned int c:8;

// char k:4;

// unsigned int m;

// double n;

};

sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐,4个8位的整型数据组成4个字节,一共有8个字节

5)struct A

{

char t:4;

char q:4; //1 对齐组合成4

unsigned int i:8;

unsigned int j:8;

unsigned int a:8;

unsigned int b:8; //4 对齐组合成4

unsigned int c:8; //4 对齐组合成4

char k:4; //1 对齐组合成4

// unsigned int m;

// double n;

};

sizeof(A)=12;

(6)struct A

{

char t:4;

char q:4; //1 对齐组合成4

unsigned int i:8;

unsigned int j:8;

unsigned int a:8;

unsigned int b:8;//4 对齐组合成4

unsigned int c:8;//4 对齐组合成4

char k:4; //1 对齐组合成4

// unsigned int m;

// double n;

};sizeof(A)=16;

(7)struct A

{

char t:4;

char q:4; //1 对齐组合成4

unsigned int i:8;

unsigned int j:8;

unsigned int a:8;

unsigned int b:8;//4 对齐组合成4

unsigned int c:8;//4 对齐组合成4

char k:4; //4 对齐组合成4

unsigned int m; //4 对齐组合成4

// double n;

};sizeof(A)=20;

(8)struct A

{

char t:4;

char q:4; //1

unsigned int i:8;

unsigned int j:8;

unsigned int a:8;

unsigned int b:8;//4 // 对齐组合成8

unsigned int c:8;//4

char k:4; //4 // 对齐组合成8

unsigned int m;//4 // 对齐组合成8

double n; //8

};sizeof(A)=32; 与8位double型数据对齐

总结:(1)当最高位为char型数据时,组合成char型数据,此时sizeof为1的整数倍。

(2)当最高位为short型数据时,组合成short型数据,可以把其中的不够16位的同一种数据组合起来成16位,不同数据不能组合在一起,此时sizeof为2的整数倍。

(3)当出现数据位最高为整型数据,也即32位数据,可以把其中的不够32位的同一种数据组合起来成32位,不同数据不能组合在一起,sizeof为4的整数倍

(4)当出现数据位最高为double数据,也即64位数据,可以把其中的不够32位的同一种数据组合起来成32位,同时可以把不同种数据组合成64位,ziseof为8的整数倍

(5)有符号和无符号数按同一种类型对待,long Int与int按同一种类型对待

(6)首先关注最高位,把相邻的数据组合成最高位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: