выравнивание uint32_t на 64-битной? - PullRequest
6 голосов
/ 28 марта 2012

Меня интересует выравнивание типов uint32_t на 64-битных платформах. Спецификация говорит, что uint32_t должен быть точно заданной битовой шириной, которая действительно кажется:

> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));   
sizeof(uint32_t): 4

Но тогда у меня есть структура:

typedef struct A {
    uint32_t a;
    uint32_t b;
} A;

Но, на удивление:

> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16

Является ли uint32_t 8-байтовым по какой-либо причине? Это действительно 8-байтовый тип внизу?

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Это полностью зависит от вашего компилятора и архитектуры. В вашем случае это выглядит так, как будто поля действительно выровнены по 8 байтов, возможно, из соображений производительности.

2 голосов
/ 28 марта 2012

Я предполагаю, что по умолчанию все в 64-битной архитектуре будет выровнено по 64-битным границам так же, как в 32-битной архитектуре, все по 4 байта.Вы можете указать директивы упаковки, чтобы избавиться от отступов.Например,

#pragma pack(0)

в gcc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...