69,373
社区成员
发帖
与我相关
我的任务
分享
struct str
{
char i:3;
unsigned short k:5;
char j:4;
unsigned long m:9;
};
struct str
{
char i:3,
char j:4,
unsigned short k:5,
unsigned long m:9,
};
“size 最大的是short,其长度为2 字节,因而结构体中的char 成员a、c 都以2 为单位对齐”这句我认为就不对。
我了解的规则是:
没有#pragma pack情况下:
结构体内部成员要按自己大小整数倍存字节,成员全对齐后结构体再以自身内部最大成员整数倍对齐自己
例子:
struct str
{
char i;
char j;
unsigned short k;
double m;
char n;
};
cout<<sizeof(str)<<endl;
str s;
s.i='c';
s.j='b';
s.k=2;
s.m=3;
s.n='d';
偏移 存的成员
0 i
1 j
2 k
3 还是k//
4 对齐
5 对齐
6 对齐
7 对齐
8 m
9 还是m
...
15 还是m
16 n 到此17字节,之后要调整为结构体内部最大成员整数倍,以下补齐7个字节
17 补齐
...
23 补齐
共计24字节
环境vc2008SP1