Вопрос по __attribute ((packed))
От: Baggy  
Дата: 22.10.04 08:52
Оценка:
Здрасте!

подскажите плиз ответ:

я объявляю enum

#define _PACKED_ __attribute__((packed))

typedef enum {
     VALUE1 = 0,
     VALUE2,
     VALUE3
} MYENUM _PACKED_;


в доке по __attribute__((packed)) сказано, что "Этот атрибут, примененный к определению enum, struct или union типа, указывает, что для представления этого типа должно быть использовано минимальное количество памяти".

что значит мининмальное количество памяти? ( в моем случае sizeof(MYENUM) возвращает 4)
Re: Вопрос по __attribute ((packed))
От: TheBeard Россия  
Дата: 22.10.04 09:19
Оценка:
Для структуры этот атрибут отменяет выравнивание (поля идут подряд одно
за другим), для union, кажется, влияет на вложенные структуры, а вот что
он делает с enum — не вполне понятно.

Baggy wrote:
>
> в доке по __attribute__((packed)) сказано, что "Этот атрибут,
> примененный к определению enum, struct или union типа, указывает, что
> для представления этого типа должно быть использовано минимальное
> количество памяти".
>
> что значит мининмальное количество памяти? ( в моем случае
> sizeof(MYENUM) возвращает 4)
Posted via RSDN NNTP Server 1.9 gamma
Re: Вопрос по __attribute ((packed))
От: PVA  
Дата: 22.10.04 09:42
Оценка:
Здравствуйте, Baggy, Вы писали:

здесь
Есть подозрения, что на текущий момент можно везде использовать
#pragma pack

а с атрибутом, imho, удобнее так:

#ifndef WIN32 ...
#define PACKED __attribute__((packed))
#else
#pragma pack(1)
#define PACKED
#endif

typedef struct PACKED
{
...
} blabla, *pblabla;
newbie
Re[2]: Вопрос по __attribute ((packed))
От: Baggy  
Дата: 22.10.04 14:12
Оценка:
Здравствуйте, PVA, Вы писали:



PVA>здесь


я как раз и пытаюсь понять, что значит фраза
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 например?
или это вообще не связанные вещи?
Re[3]: Вопрос по __attribute ((packed))
От: TheBeard Россия  
Дата: 22.10.04 14:16
Оценка:
Вы, видимо, не обратили внимание на такую фразу:

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 например?
> или это вообще не связанные вещи?
Posted via RSDN NNTP Server 1.9 gamma
Re[4]: Вопрос по __attribute ((packed))
От: raskolnikov  
Дата: 28.10.04 14:17
Оценка:
A vy vidimo ne obratili vnimanija na slovo "unless".

Eli by bylo tak:
enum E1{...} 
#pragma pack( push, 1 )
typedef E1 e1;
#pragma pack(pop)


to vy pravy, szhatija ne budet, no tut deklaratija enuma vnutri derektivy packed.
t.e tak:
#pragma pack( push, 1 )
typedef enum E1{...} e1;
#pragma pack(pop)


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 например?
>> или это вообще не связанные вещи?
Re[5]: Вопрос по __attribute ((packed))
От: PVA  
Дата: 29.10.04 13:59
Оценка:
Здравствуйте, raskolnikov, Вы писали:

R>A vy vidimo ne obratili vnimanija na slovo "unless".


R>Eli by bylo tak:

R>
R>enum E1{...} 
R>#pragma pack( push, 1 )
R>typedef E1 e1;
R>#pragma pack(pop) 
R>


не совсем понимаю, что в enum'e упаковывать? Или имеется ввиду, что в зависимости от заданного диапазона вы хотели бы, чтоб компилятор использовал подходящий тип данных ([0x0..0xFF] — 1 byte, [0x0..0xFFFF] — 2 bytes, etc)?

imho, логика enum'а — объявление целочисленной переменной с ограниченным набором значений.
а атрибуты упаковки используются тлько для указания исклчить выравнивание.
newbie
Re[6]: Вопрос по __attribute ((packed))
От: TheBeard Россия  
Дата: 29.10.04 14:32
Оценка:
Хорошая мысль. Надо будет проверить. Я тоже не мог понять, что там пакуется.

PVA wrote:

> imho, логика enum'а — объявление целочисленной переменной с

> ограниченным набором значений. а атрибуты упаковки используются тлько
> для указания исклчить выравнивание.
Posted via RSDN NNTP Server 1.9 gamma
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.