Есть структура вида:
#pragma pack(1)
typedef struct{
int a;
int b;
char c;
}card_conf_t;
Ожидаю, что ее размер 9 байт и, действительно, sizeof() именно такое число и дает. А вот в ассемблерном листинге компилятор пишет:
// 19 card_conf_t card_conf;
card_conf:
DS8 12
Вопрос, почему он (компилятор) резервирует 12 байт?
Я пытаюсь разместить во flash впритык две структуры и получается, что они друг на друга наезжают
#pragma location=CONF_UDAT_ADDR
__no_init card_conf_t card_conf;
#pragma location=(CONF_UDAT_ADDR+sizeof(card_conf_t))
__no_init user_data_t user_data[3];
// 18 #pragma location=CONF_UDAT_ADDR
ASEGN DATA_AN:DATA:NOROOT,0132a00H
// 19 __no_init card_conf_t card_conf;
card_conf:
DS8 12
// 20 #pragma location=(CONF_UDAT_ADDR+sizeof(card_conf_t))
ASEGN DATA_AN:DATA:NOROOT,0132a09H <-- Правильный адрес, вычисленный при пом. sizeof()
// 21 __no_init user_data_t user_data[3];
user_data:
DS8 21692
Пользуюсь IAR EWARM v4.40А
IAR C/C++ Compiler for ARM 4.40.1.201