Я пишу программу для распаковки PE-файлов. У меня есть структура, Pe_SymbolHeader. Это выглядит так:
typedef struct _Pe_SymbolHeader {
char Name[8]; // 8
uint32_t Value; // 12
uint16_t SectionNumber; // 14
uint16_t Type; // 16
uint8_t StorageClass; // 17
uint8_t NumberOfAuxSymbols; // 18
} Pe_SymbolHeader;
gcc сообщает мне, что размер этой структуры составляет 20 байт.
printf("sizeof Pe_SymbolHeader %d\n", sizeof(Pe_SymbolHeader));
Я решил поместить Pe_SymbolHeader в стек и посмотреть, где все находится в памяти
Pe_SymbolHeader test
printf("%p\n", &(test.Name));
printf("%p\n", &(test.Value));
printf("%p\n", &(test.SectionNumber));
printf("%p\n", &(test.Type));
printf("%p\n", &(test.StorageClass));
printf("%p\n", &(test.NumberOfAuxSymbols));
Это дало мне следующее, что кажется нормальным:
0x7fffffffe150
0x7fffffffe158
0x7fffffffe15c
0x7fffffffe15e
0x7fffffffe160
0x7fffffffe161
Так что, если gcc использует 18 байтов для хранения моей структуры, почему sizeof сообщает мне, что структура займет 20 байтов?
Редактировать: Хорошо, похоже, что gcc пытается помочь мне, это то, что убивает меня, и несколько ответов верны. Я могу голосовать только за одного, но спасибо тем, кто ответил.