此帖出自嵌入式系统论坛
最新回复
编译器为了访问方便,会对齐。VC默认为8字节对齐。如果结构中最大成员变量占用字节少于他,以结构中最大成员变量的字节数对其。CHAR 为1,DOUBLE为8。就以8为准。
reg_a :
char regAddr占用一个字节。位于字节0处。
double regValue;占用8个字节。因为DOUBLE 类型对齐字节数为8.为了访问方便,放在8的倍数处。存放位置 为
8-15。1-7的字节处系统补齐。其实啥也没有。
char regMast占用一个字节。位于16处。
最后由于结构本身需要对齐,当多个结构变量连续存储的时候方便访问,结构对其字节数为结构中最大成员变量占用字节。
所以sizeof(reg_A)=8+8+8=24。
reg_B:
char regAddr; 占用1个字节。放于位置0;
char regMast; 启示位置1,刚好为CHAR 的倍数,就放在位置1。占用一个字节
double regValue; 下一个字节位置2不是8的倍数,2-7补齐,放于8-15处。到此共用了16个字节。
由于regValue的下个存储位置16,刚好是double类型的倍数,所以不用往后补齐。共占用16字节。所以sizeof(reg_B)=1+1+6+8=16。
解释的不是很全,建议楼主上网搜下结构对齐方面的知识。
详情
回复
发表于 2007-12-21 16:28
| ||
|
||
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
| |
|
|
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
EEWorld Datasheet 技术支持