首先需要明白,64位系统,不同变量占有的空间为
char :1个字节
char*(即指针变量): 8个字节 (32位系统为4字节)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节 (32位系统下为4字节,大小和int一样)
long long: 8个字节
unsigned long: 8个字节 (32位系统下为4个字节)
然后需要明白,64位系统在内存管理方面遵循8字节对齐(32位系统为4字节对齐),原则:在8字节对齐的情况下,按8个字节为单位分配存储空间,如果不足,会自动补充,本次分配不足以存放下面的变量时,会重新分配空间。
比如
struct A{
unsigned int a;
char b[2];
double c;
short d;
}
比如要计算sizeof(A),如何计算呢
首先unsigned int a为4个字节,还剩4个字节分配给char b[2],无论是在类还是结构体中,数组类型都占有数组中变量占有空间乘以个数,这里的char b[2]占有2个字节,还剩2个字节
Double c占有8个字节,额外需要申请8个字节,占有6个,剩下两个字节
这两个字节刚好给d
总共占用24个字节