*****************************************************************************
** 所谓对齐,就是起始地址是对齐字节的倍数
** 如: #pragma pack(2) 起始地址就是 0x...0,2,4,6,8
** #pragma pack(4) 0x...0,4,8,c,10...
** #pragma pack() 取消对齐
*****************************************************************************
对于char型数据,其自身对齐值为1
对于short型为2,
对于int,float,double类型,其自身对齐值为4,单位字节。
这里面有四个概念值:
1)数据类型自身的对齐值 :就是上面交代的基本数据类型的自身对齐值。
2)指定对齐值 :#pragma pack (value)时的指定对齐值value。
3)结构体或者类的自身对齐值 :其成员中自身对齐值最大的那个值。
4)数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中较小的那个值。(以此为准)
struct ds{
char b; /* 0xbfffded0 */
short c; /* 0xbfffded2 */
int a; /* 0xbfffded4 */
};
阅读(462) | 评论(0) | 转发(0) |