首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

帮小弟我算算这个结构是多大

2012-02-12 
帮我算算这个结构是多大?structmyStruct{publicintipublicdoubledpubliccharc}sizeof(myStruct),编译器

帮我算算这个结构是多大?
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个字节.

热点排行