字节大小 | 32位系统 | 64位系统 |
---|---|---|
char | 1 | 1 |
short(short int) | 2 | 2 |
int | 4 | 4 |
指针 | 4 | 8 |
long(long int) | 4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
long long | 8 | 8 |
virtual 虚函数表 | 4 | 8 |
64位系统在内存管理方面遵循8字节对齐,原则:在8字节对齐的情况下,按8个字节为单位分配存储空间,如果不足,会自动补充;
32位系统在内存管理方面遵循4字节对齐,原则:在4字节对齐的情况下,按4个字节为单位分配存储空间,如果不足,会自动补充;
案例:
struct A{
unsigned int a;
char b[2];
double c;
short d;
}
64位系统下:
unsigned int a; //对于开始连续的第一个8字节内存,a占4字节 ;
char b[2]; //b[2]占1*2字节,存放在第一个8字节内存的后4字节中,连续2字节存放,还剩2个字节;
double c; //c占8字节,第一个8字节最后2字节不足以存放c,自动填充该2个字节空间,并开辟第二个8字节内存存放c;
short d; //d占2字节,开辟第三个8字节,存放d,剩余的6个字节空间系统自动填充。
故总共开辟了8*3=24字节存放该结构体;
32位系统下:
unsigned int a; //对于开始连续的第一个4字节内存,a占4字节 ;
char b[2]; //b[2]占1*2字节,开辟第二个4字节内存存放c,连续2字节存放,还剩2个字节;
double c; //c占8字节,第二个8字节最后2字节不足以存放c,自动填充该2个字节空间,并开辟第三、四个4字节内存存放c;
short d; //d占2字节,开辟第五个4字节,存放d,剩余的2个字节自动填充。
故总共开辟了4+4+8+4=20字节存放该结构体;