36楼 bouluo505 (
bouluo)

回复于
2005-03-22 13:00:21 得分
7
struct{
short a1;
short a2;
short a3;
}A
struct{
long a1;
short a2;
}B
sizeof( A)=6, sizeof( B)=8,为什么?
注:sizeof(short)=2,sizeof(long)=4
________________________________________
[C++]中:::在缺省的情况下(编译器都会将结构体中的内容在自然边界上对齐):
sizeof(short)=2 为单字,即要在偶数地址上对齐!
假设a1的地址为:0x00000000h,则a2为0x00000002h,a3为0x00000004h(以上都为相对地址)
所以sizeof(A)=4+2=6;
对于B,sizeof(long)=4;
假设a1的地址为:0x00000000h,而sizeof(short)=2,,即要在偶数地址上对齐!
所以a2的地址为: 0x00000004h
所以sizeof(B)=4+2=6;
但VC++的编译器不同值是8!(按最长对齐)这不符合标准