计算相同数据类型的结构体大小
struct test
{
char a;//占1字节
char b;//占1字节
char c;//占1字节
};
//整个结构体占3字节,abc在内存中紧密排列
计算不同数据类型的结构体大小
原则:按结构体中最大的数据结构空间大小对齐
struct test
{
int a;//占4字节
char b;//原本占1字节,按结构体中最大的数据类型int对齐,空出3字节,共占4字节
int c;//占4字节
};
//整个结构体占4+4+4=12字节
计算相同数据类型的位域结构体大小
struct test
{
unsigned int b1 : 5; //位域,int占4个字节32位,5代表b1占用前5位
unsigned int b2 : 5;
unsigned int b3 : 5;
unsigned int b4 : 5;
unsigned int b5 : 5;
} ;
//原本总大小是5*5=25位,一个int32位(4字节),也就是用了32位中的25位,计算机最小还是会开辟4字节的空间去存储25位的数据,这25位紧密排列
//因此test的大小是4字节
计算不同数据类型的位域结构体大小
原则1:按结构体中最大的数据类型的空间对齐
原则2:新的数据类型要开辟新的空间存储数据
struct test
{
int a : 4;
int b : 12;
short c : 6;
short d : 10;
};
//按结构体内最大数据类型对齐,这里最大的是int(32位4字节),因此第一个32位的空间存放4+12=16位,
//因为short是不同的数据类型,因此要开辟新的空间,因为又要和int对齐,因此第二个32位空间存放6+10=16位
//所以总的结构体大小是2个32位的空间等于8字节