C++
1.sizeof,字节对齐问题。
struct mystruct1{
short a1;
short a2;
short a3;
};
struct mystruct2{
bool b1;
bool b2;
char c;
int i;
};
struct mystruct3{
bool b1;
bool b2;
};
struct mystruct4{
bool b1;
int i;
bool b2;
};
分析:在32位系统中测试sizeof(mystruct1)=6,sizeof(mystruct1)=8,sizeof(mystruct3)=2,sizeof(mystruct4)=12,sizeof(bool)=1。在32位系统下,bool占一个字节,结构体占的总字节数是该结构体中最大类型所占字节数的整数倍。mystruct4中由于第一个bool和第二个bool不连续出现,因此各占4个字节。下面是32位系统和64位系统下,各数据类型所占的字节数
32位操作系统:
类型 | 占字节数 |
---|---|
char | 1个字节(固定) |
*(即指针变量) | 4个字节(32位机的寻址空间是4个字节) |
short int | 2个字节(固定) |
int | 4个字节(固定) |
unsigned int | 4个字节(固定) |
float | 4个字节(固定) |
double | 8个字节(固定) |
long | 4个字节(VS下验证是4个字节) |
unsigned long | 4个字节(变化,其实就是寻址空间的地址长度数值;VS下验证是4个字节) |
long long | 8个字节(固定) |
64位操作系统:
类型 | 占字节数 |
---|---|
char | 1个字节(固定) |
*(即指针变量) | 8个字节 |
short i |