pragma pack (1) nor attribute ((выровненный (1))) работает
мой код работал в прошлом, но теперь размер структуры внезапно равен 16 байтам. Раньше было 13 байт. Недавно я обновился с Xcode 4.2 до Xcode 4.3.1 (4E1019).
#pragma pack(1)
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
};
#pragma pack()
STATIC_ASSERT(expected_13bytes, sizeof(struct ChunkStruct) == 13);
Я пробовал unsuccesfully используя
#pragma pack(push, 1)
/* struct ChunkStruct { ... }; */
#pragma pack(pop)
Я также пробовал следующее, но не повезло
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
} __attribute__ ((aligned (1)));
как упаковать структуры с помощью Xcode 4.3.1 ?
1 ответов
Xcode использует gcc
и clang
компиляторы, которые оба используют __attribute__((packed))
обозначить упаковку структуры.
struct foo {
uint8_t bar;
uint8_t baz;
} __attribute__((packed));
используя __attribute__((aligned(1)))
говорит компилятору начать каждый элемент структуры на следующей границе байта, но не говорит ему, сколько места он может поставить в конце. Это означает, что компилятору разрешено округлять struct
до кратного размера машинного слова для лучшего использования в массивах и подобных. __attribute__((packed))
говорит компилятору не использовать никакого заполнения вообще, даже на конец struct
.