日期:2014-05-20  浏览次数:20791 次

帮我算算这个结构是多大?
struct   myStruct

{  

public   int   i;  

public   double   d;  

public   char   c   ;

}  
sizeof(myStruct),编译器计算出来是16,但我按照规则算怎么算也是24,谁帮助解释一下?

------解决方案--------------------
正确答案是24。
int AAAAXXXX //int占4个字节
double AAAAAAAA //double占8个字节,但是由于其开始位必须被8整除,因此int后要布4字节
char AAXXXXXX //char占2个字节,当前总大小位18个字节,不能被8整除,因此必须补充6个字节到24时才能整除。
因此总大小为24。这些补字节都是由于数据读取都是8字节读取的特征。
------解决方案--------------------
请查阅C++ "内存对齐 "机制

你可以设定编译器,设定不同的内存对齐方法.也可以用属性[StructLayout]

根据你的描述,你的编译器设置是这样的.
int char
[0][0][0][0] [0][][][]
long
[0][0][0][0][0][0][0][0]

因为int不满8个字节,所以编译器会将char移到int后面,占一个字节,再补三个空字节.

字节数就是8*2=16

这个看编译器设置,不同的编译器,不同的设置,你会有不同的sizeof值.

不过VC++编译器默认设置结果就是16个字节.