有一个类:
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;

解决方案 »

  1.   

    补充:
      对其进行文件输出,发现 seq2_unknow1、seq4_unknow占4个字节。
      seq3_unknow占2个字节,而唯独seq3_config占了意料中的2个字节,这是怎么回事?
      

  2.   

    因为内存是4字节对齐的
    seq2_unknow1浪费了2BYTE
    seq3_unknow和seq3_config浪费了1byte
    seq4_unknow浪费了2byte
      

  3.   

    回复人: flyelf(空谷清音) ( ) 信誉:145  2005-08-24 20:44:00  得分: 0  
     
     
       字节对齐问题引起的
      
     
    ----------------------------------------------------------那可有解决方法?(当然,不能改变那些变量的次序)
      

  4.   

    #pragma pack(1)
    字节以1对齐,以效率换空间,不合算的
      

  5.   

    #pragma pack(push, 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)