发布网友 发布时间:2022-04-24 13:45
共4个回答
热心网友 时间:2023-10-15 00:04
内存对齐问题,比如这个结构体首地址为0x00000000热心网友 时间:2023-10-15 00:04
内存对齐,像:char,short这样不足4个字节的,也默认分配它4个字节的内存空间.追问我知道这些。那不是有我分析的吗。你看看哪儿错了。结果是24,我算的是20追答cXXX
ssXX
dddd
dddd
aaXX
iiii
你应该这样写才对.
热心网友 时间:2023-10-15 00:05
结构体采用高位先存的存储形式。最大的为double 则以8为基准,要注意遇到int类型是必须以整的形式存储。热心网友 时间:2023-10-15 00:05
第一个可能是这样的cXssxxxxddddddddaaXXiiii追问不是超过4就按4的倍数计算吗。追答对齐的几点:
1.数据类型自身的对齐值: 对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
你(1)情况就是符合第二条:最大的是4
结果应该是这样的:cXXXssXXddddddddaaXXiiii
(2)情况符合第4条,对齐值是2