有一个类:
class aaa
{
public:
aaa();
long size;
long atomType;
long flags;
long seq1;
long seq1_unknow;
long seq2;
short seq2_unknow1;
long seq2_unknow2;
long seq2_bitRate;
long seq2_bitRate1;
long seq3;
char seq3_unknow;
short seq3_config;
long seq4;
short seq4_unknow;
};
用 sizeof(aaa); 得到的是 56 而不是 51..何故? 望各位大大不吝赐教。
系统Win2000 + VC6;
class aaa
{
public:
aaa();
long size;
long atomType;
long flags;
long seq1;
long seq1_unknow;
long seq2;
short seq2_unknow1;
long seq2_unknow2;
long seq2_bitRate;
long seq2_bitRate1;
long seq3;
char seq3_unknow;
short seq3_config;
long seq4;
short seq4_unknow;
};
用 sizeof(aaa); 得到的是 56 而不是 51..何故? 望各位大大不吝赐教。
系统Win2000 + VC6;
对其进行文件输出,发现 seq2_unknow1、seq4_unknow占4个字节。
seq3_unknow占2个字节,而唯独seq3_config占了意料中的2个字节,这是怎么回事?
seq2_unknow1浪费了2BYTE
seq3_unknow和seq3_config浪费了1byte
seq4_unknow浪费了2byte
字节对齐问题引起的
----------------------------------------------------------那可有解决方法?(当然,不能改变那些变量的次序)
字节以1对齐,以效率换空间,不合算的
class aaa
{
public:
aaa();
long size;
long atomType;
long flags;
long seq1;
long seq1_unknow;
long seq2;
short seq2_unknow1;
long seq2_unknow2;
long seq2_bitRate;
long seq2_bitRate1;
long seq3;
char seq3_unknow;
short seq3_config;
long seq4;
short seq4_unknow;
};
#pragma pack(pop)