>>под структуру выделяется пямять кратная 4 байтам, нельзя ли указать кратность равную
>>1 байту ? и как это делается?
>>
>>Поясняю:
>> struct s_
>>{
>> unsigned int a; /* 4 байта */
>> unsigned short b; /* 2 байта */
>>
>>};
>>typedef struct s_ s;
>>
>>sizeof(s) -
>> 8 байт !!!
>>sizeof(s.a) - 4 байта
>>
>>sizeof(s.b) - 2 байта
>>
>>но 8 != 4+2 а мне надо
>>что б размер структуры в целом совпадал с размером суммы всех
>>полей.
>
>struct abc {
> char a;
> short b;
> long c;
>}__attribute__((packed));
>printf("abc size : %d\n",sizeof(struct abc));
>
>читайте доки про gcc - там много полезного ;-)
Я на самом деле не советую юзать no_pack прагмы и подобные им, потому как ребята из ГЦЦ сквад прямо заявили, что "не юзать в наше время форматирование структур по границе ширины шины - это дикость, и править в нашем компилере баги, возникающие изза ноу-паков мы не собираемся". Чтобы не быть голословным, приведу простой пример - сделай (сообразно написаному выше) std::vector<struct abc> и попробуй с ним плотно поработать... Ни один GDB не разгребет тебе возникших глюков...
Правильный выход тут только один - юзать пустые паддинги для уверенности, вроде:
struct abc {
char a;
short b;
long c;
uint8 zero_padding;
};
(Это для 32-битной шины)