Sizeof Reports Неверный размер типовой структуры - C ++ - PullRequest
1 голос
/ 06 декабря 2010

Мое приложение имеет определенную структуру:

typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;

Я бы ожидал, что sizeof(zsSysVersionMsg_t) оценит до 3. Однако, когда я запускаю свое приложение, оно оценивается до 4. Может кто-нибудь объяснить, почему это так? (Мне действительно нужно оценить до 3.) Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 декабря 2010

http://en.wikipedia.org/wiki/Data_structure_alignment

Как сделать так, чтобы оно оценивалось до 3, также показано в этой статье

2 голосов
/ 06 декабря 2010

Большинство платформ будут выравнивать и дополнять структуры так, чтобы они начинались и заканчивались точно на границе слова.Это сделано для повышения производительности памяти.

Если вы работаете в Windows, вы можете установить собственное выравнивание.В вашем случае вы хотите выровнять по одному байту, так что сделайте это:

#pragma pack( push, 1 )
typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;
#pragma pack( pop )
...