в доке по __attribute__((packed)) сказано, что "Этот атрибут, примененный к определению enum, struct или union типа, указывает, что для представления этого типа должно быть использовано минимальное количество памяти".
что значит мининмальное количество памяти? ( в моем случае sizeof(MYENUM) возвращает 4)
Для структуры этот атрибут отменяет выравнивание (поля идут подряд одно
за другим), для union, кажется, влияет на вложенные структуры, а вот что
он делает с enum — не вполне понятно.
Baggy wrote: > > в доке по __attribute__((packed)) сказано, что "Этот атрибут, > примененный к определению enum, struct или union типа, указывает, что > для представления этого типа должно быть использовано минимальное > количество памяти". > > что значит мининмальное количество памяти? ( в моем случае > sizeof(MYENUM) возвращает 4)
я как раз и пытаюсь понять, что значит фраза
packed
This attribute, attached to an enum, struct, or union type definition, specifies that the !!!!!minimum!!!! required memory be used to represent the type.
минимум это скоко? почему sizeof() на мою переменную типа объявленного enum'ом дает 4 а не 1 например?
или это вообще не связанные вещи?
You may only specify this attribute after a closing curly brace on an
enum definition, not in a typedef declaration, unless that declaration
also contains the definition of the enum.
на абзац ниже
Baggy wrote:
> > минимум это скоко? почему sizeof() на мою переменную типа объявленного enum'ом дает 4 а не 1 например? > или это вообще не связанные вещи?
To chto sizeof 4 bydaet, eto pohozhe ot kompilera zavisit.
U Stroustrupa "C++ Special Editition" v glave 4.8 pro diapazon i razmer enuma
napisano.
Здравствуйте, TheBeard, Вы писали:
TB>Вы, видимо, не обратили внимание на такую фразу:
TB>You may only specify this attribute after a closing curly brace on an TB>enum definition, not in a typedef declaration, unless that declaration TB>also contains the definition of the enum.
TB>на абзац ниже
TB>Baggy wrote:
>> >> минимум это скоко? почему sizeof() на мою переменную типа объявленного enum'ом дает 4 а не 1 например? >> или это вообще не связанные вещи?
не совсем понимаю, что в enum'e упаковывать? Или имеется ввиду, что в зависимости от заданного диапазона вы хотели бы, чтоб компилятор использовал подходящий тип данных ([0x0..0xFF] — 1 byte, [0x0..0xFFFF] — 2 bytes, etc)?
imho, логика enum'а — объявление целочисленной переменной с ограниченным набором значений.
а атрибуты упаковки используются тлько для указания исклчить выравнивание.