Здравствуйте. Есть директива #pragma pack(), упаковка структуры не совсем понятен параметр функции pack (1,2,4,8 или 16)...а IAR(msp) записует переменные в память ОЗУ по чётным адресам так как указатель двухбайтовый (это связано с архитектурой msp)? На сколько я понимаю из-за этого и нужно применять выравнивание ? И объясните пожалуйста использование директивы #pragma data_alignment=(1,2,4...)...вообще непонятно всё, что связано с alignment... Заранее спасибо )
Также есть вопрос по поводу битового поля. struct fff { unsigned char first : 1; //1 -количество бит в поле unsigned char second : 1; unsigned char third : 1; unsigned char forth : 1; unsigned char fifth : 1; unsigned char sixth : 1; unsigned char sevnth : 1; unsigned char eighth : 1; }; a=sizeof(struct fff); //a=1;
а если изменить на int 2 бита
struct fff { unsigned char first : 1; //1 -количество бит в поле unsigned char second : 1; unsigned int third : 1; unsigned char forth : 1; unsigned char fifth : 1; unsigned int sixth : 1; unsigned char sevnth : 1; unsigned char eighth : 1; } ; то
a=sizeof(struct fff); //a=10;
Не понятно, почему размер структуры стал 10 байт???
Заранее спасибо )
Сообщение отредактировал Twen - Dec 8 2010, 09:40
|