读书人

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

发布时间: 2012-02-12 17:16:34 作者: rapoo

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

读书人网 >C#

热点推荐