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)首先关注最高位,把相邻的数据组合成最高位。
{
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)首先关注最高位,把相邻的数据组合成最高位。
相关文章推荐
- sizeof数据对齐问题
- sizeof数据对齐问题
- C_语法概念_sizeof()功能:计算数据空间的字节数以及字节对齐问题
- C++中数据对齐问题。struct、union、enum,类继承。再谈sizeof()
- 常考笔试题,详细解剖C++运算符sizeof()的使用及字节对齐问题
- 字节对齐、sizeof的问题分析
- sizeof 与结构体大小及结构体对齐问题, 字节对齐
- 基于结构体sizeof的字节对齐问题讨论
- 数据对齐问题
- PIC单片机精通_ADC左对齐与右对齐的数据读取问题
- C 语言编译过程 C语言中各种数据存储的不同内存区域 关于sizeof 结构体比实际的大的问题
- 结构体数据对齐,sizeof详解
- C++结构变量数据对齐问题 分类: C/C++ 2015-07-03 09:07 157人阅读 评论(0) 收藏
- 结构体的sizeof的问题--结构体对齐的问题(整理)
- 关于C语言中数据结构的内存对齐问题
- 数据对齐详解——面试经典问题
- C++结构变量数据对齐问题
- 关于opencv中Mat数据对齐的问题
- C++中struct/class的数据对齐与sizeof
- gpu显存(全局内存)在使用时数据对齐的问题