Можем ли мы предсказать, как структура C будет реализована компилятором?
Если я напишу (очень плохо выровненную) структуру:
struct {
uint16_t a;
uint32_t b;
uint8_t c;
} s;
char *p = (char*)&s;
могу ли я гарантировать, что p[6]
совпадает с s.c
? Распределяются ли поля структуры таким наиболее очевидным и каноническим образом, чтобы мы могли предсказать, где каждое поле будет в памяти?
Редактировать: struct __attribute__ ((__packed__)) {...} s;
даст мне такое поведение в GCC?