struct Struct1
{
BYTE  byte1;
CTime time0;
BYTE  byte2;}q;
int n=sizeof(q);
结果:n=12;
struct Struct1
{
         CTime time0;
BYTE  byte1;
BYTE  byte2;}q;
int n=sizeof(q);
结果:n=8;
为什么有不同的n值?我觉得正确的n=6,请各位赐教。

解决方案 »

  1.   

    使用
    #pragma pack(1)
    struct{...};
    #pragma pack(0)
    就对了,这是由于编译器使用了内存对齐的技术
      

  2.   

    在内存中,数据的存储地址一般以4的倍数开始,虽然BYTE只占一个字节,但是地址要以4的倍数开始,故要占用4个字节,故sizeof(q)=12,当两个BYTE类型的变量一起时,将共同占据4个字节,故sizeof(q)=8
      

  3.   

    :opentuxedo与sans
    详细说明以下好吗?哪一个更好,速度更快?
      

  4.   

    这是32位CPU内存地址调整的结果,若
    struct Struct1
    {
    int  byte1;
    int  byte2;
    CTime time0;
    }q;就不会有问题了。
    我看过一篇关于优化的文章,说:
    尽量要32位变量,
    int a;要快于 BYTE a; char a;
    因BYTE ,char 32位的CPU要进行内存调整,消耗一些时间。
      

  5.   

    project/setting
    c/c++
    category/code generation
    structure member alignment
    选择1 byte
      

  6.   

    yeah, compiler align your struct.use#pragma pack( push, pack1, 1 )and pair with
    #pragma pack( pop, pack1 )