常见类型在32位系统下和64位系统下的取值范围
结构体大小的计算方法
⭐⭐⭐字节对齐⭐⭐⭐
首先计算结构体中类型最大的成员,最大值和value值(4字节)进行比较
然后按两者中较小的为单位进行开辟空间。
如:struct test
{
char ch;
short sh;
char t;
}; 此时结构体中成员类型最大的字节为2字节,2和value(4)进行比较,2是小的,在给结构体开辟空间时按2字节对齐,第一个2字节存放char,第二个2字节存放short,第三个2字节存放char,一共6个字节。
所以进行结构体成员变量定义时,尽量按数据类型字节从小到大或从大到小进行排序,尽量不要大的小的类型交叉排序。
⭐⭐⭐一定要遵循节省空间的原则⭐⭐⭐
下列结构体在内存中占用多少字节(32位编译器)?
struct A
{
char t;
char k;
unsigned short i;
unsigned long m;
};
long类型在32位中占4字节,与value4字节相比,结构体内存每次开辟4个字节的内存空间,所以结构体总共占8字节;
在32位系统中,有如下结构体,sizeof(fun)数值为多少?
#pragma pack(1)
struct fun
{
int i; // 4字节
double d; // 8字节
char c; // 1字节
};
sizeof(fun)大小为13;
第一行的程序#pragma pack(1)把编译器的字节对齐数改成了1,也就是说,编译器以每次开辟一个字节的内存给结构体开辟空间;所以该结构体大小为13字节;