реклама на сайте
подробности

 
 
> Как сделать структуру из битовых полей минимального размера?
inventor
сообщение Sep 30 2015, 15:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Подскажите опции, как сделать подобную структуру 1 байт длины
при всех попытках получается 4 байта

CODE
/**
* Состояние во время работы - 1 байт
*/
typedef struct {
unsigned device_in_runtime : 1;
unsigned acquisition_running : 1;
unsigned gps_sync_ok : 1;
unsigned queue_overrun : 1;
unsigned rsvd0:4;
} RUNTIME_STATE;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение Sep 30 2015, 16:17
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



не досмотр с меня под вечер..

CODE


typedef struct {
bool device_in_runtime : 1;
bool acquisition_running : 1;
bool gps_sync_ok : 1;
bool queue_overrun : 1;
bool rsvd0:4;
} RUNTIME_STATE;



тип правильный укажите...

Сообщение отредактировал kolobok0 - Sep 30 2015, 16:44
Go to the top of the page
 
+Quote Post
inventor
сообщение Sep 30 2015, 19:22
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(kolobok0 @ Sep 30 2015, 19:17) *
не досмотр с меня под вечер..

CODE


typedef struct {
bool device_in_runtime : 1;
bool acquisition_running : 1;
bool gps_sync_ok : 1;
bool queue_overrun : 1;
bool rsvd0:4;
} RUNTIME_STATE;



тип правильный укажите...


ставил и pragma pack(1) и
__attrib__ ((packed))
попробую завтра поменять unsigned на u8
меня сбило с толку что в борланде размер этой структуры
получился 1 байт
хотя то же стояло unsigned

Go to the top of the page
 
+Quote Post
kolobok0
сообщение Sep 30 2015, 19:49
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(inventor @ Sep 30 2015, 22:22) *
ставил и ...


CODE


typedef struct {
bool device_in_runtime : 1;
bool acquisition_running : 1;
bool gps_sync_ok : 1;
bool queue_overrun : 1;
bool rsvd0:4;
} RUNTIME_STATE;



тупо скопируйте тот код что запостил я.
потом компильнитесь и посмотрите отличия от Вашего варианта...


Цитата(zltigo @ Sep 30 2015, 21:02) *
Что это написано? Не осилил sad.gif


конкретнее какие слова не понятны?

Сообщение отредактировал kolobok0 - Sep 30 2015, 19:50
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2015, 06:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolobok0 @ Sep 30 2015, 22:49) *
конкретнее какие слова не понятны?

К сожалению все sad.gif. Не могу даже ухватиться за какую-то тень мысли sad.gif


QUOTE (den_po @ Oct 1 2015, 00:17) *
sizeof(bool) не обязан быть 1

Именно так! Зависит от платформы и компилятроа.




QUOTE (inventor @ Oct 1 2015, 09:14) *
единственное что непонятно, почему в борланде BCC32 все эти структуры
такого размера как мне надо!

Потому, что Борланд sad.gif с его феерической традиционной кривизной и наплевательством на стандарты. Сваяли в свое время некий "Паскаль" в отсутствие стандарта, и решили повторить "успех" с Си. Я начинал в свое время BCPP 1.0 - ну очень потом, когда поумнел, ругался.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2015, 06:37
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zltigo @ Oct 1 2015, 09:31) *
Потому, что Борланд sad.gif с его феерической традиционной кривизной и наплевательством на стандарты. Сваяли в свое время некий "Паскаль" в отсутствие стандарта, и решили повторить "успех" с Си. Я начинал в свое время BCPP 1.0 - ну очень потом, когда поумнел, ругался.

Я бы так не спешил. Вот читаю в стандарте про битовые поля и до конца понять не могу. Там практически всё "implementation-defined":
Цитата
An implementation may allocate any addressable storage unit large enough to hold a bit-field.
If enough space remains, a bit-field that immediately follows another bit-field in a
structure shall be packed into adjacent bits of the same unit. If insufficient space remains,
whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is
implementation-defined. The order of allocation of bit-fields within a unit (high-order to
low-order or low-order to high-order) is implementation-defined. The alignment of the
addressable storage unit is unspecified.

Короче, там почти ничего не определено стандартом. Битовые поля отданы на откуп компиляторописателям.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2015, 10:01
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (scifi @ Oct 1 2015, 09:37) *
Короче, там почти ничего не определено стандартом. Битовые поля отданы на откуп компиляторописателям.

Но не замена ЯВНО указанного размера "юнита" int на восемь бит, как это делает по уверждению автора Борланд.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 1 2015, 10:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zltigo @ Oct 1 2015, 13:01) *
Но не замена ЯВНО указанного размера "юнита" int на восемь бит, как это делает по уверждению автора Борланд.

Пруф?
Я утверждаю обратное.
Там даже вот такое есть:
Цитата
A bit-field shall have a type that is a qualified or unqualified version of_Bool, signed int,unsigned int, or some other implementation-defined type.

И нигде не сказано, что для битового поля будет выделена ячейка памяти, размер которой соответствует указанному типу. Ну просто нигде.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- inventor   Как сделать структуру из битовых полей минимального размера?   Sep 30 2015, 15:54
- - kolobok0   Цитата(inventor @ Sep 30 2015, 18:54) Под...   Sep 30 2015, 16:10
- - SSerge   А какого размера unsigned int? Правильно, 4 байта....   Sep 30 2015, 16:16
|- - inventor   Цитата(kolobok0 @ Sep 30 2015, 22:49) COD...   Oct 1 2015, 06:14
|- - zltigo   QUOTE (scifi @ Oct 1 2015, 13:29) И нигде...   Oct 1 2015, 12:57
|- - scifi   Цитата(zltigo @ Oct 1 2015, 15:57) А то, ...   Oct 1 2015, 13:09
|- - zltigo   QUOTE (scifi @ Oct 1 2015, 16:09) ИМХО, т...   Oct 1 2015, 13:17
|- - scifi   Цитата(zltigo @ Oct 1 2015, 16:17) Наверн...   Oct 1 2015, 13:35
|- - zltigo   QUOTE (scifi @ Oct 1 2015, 16:35) Можете ...   Oct 1 2015, 13:47
|- - scifi   Ну что ж, можно констатировать, что есть как миним...   Oct 1 2015, 14:05
|- - zltigo   QUOTE (scifi @ Oct 1 2015, 17:05) Кстати,...   Oct 1 2015, 14:20
|- - scifi   Цитата(zltigo @ Oct 1 2015, 17:20) Я бы н...   Oct 1 2015, 14:52
|- - zltigo   QUOTE (scifi @ Oct 1 2015, 17:52) Кстати,...   Oct 1 2015, 20:17
- - zltigo   QUOTE (inventor @ Sep 30 2015, 18:54) при...   Sep 30 2015, 16:20
|- - scifi   Цитата(zltigo @ Sep 30 2015, 19:20) Было-...   Sep 30 2015, 16:35
- - ViKo   Правильно колобок говорил: паки-паки... Никакие ch...   Sep 30 2015, 17:01
|- - kolobok0   Цитата(ViKo @ Sep 30 2015, 20:01) Правиль...   Sep 30 2015, 17:16
|- - zltigo   QUOTE (kolobok0 @ Sep 30 2015, 20:16) там...   Sep 30 2015, 18:02
- - den_po   sizeof(bool) не обязан быть 1   Sep 30 2015, 21:17
- - ViKo   Похоже, битовое поле должно встраиваться в тот тип...   Oct 1 2015, 08:58
|- - scifi   Цитата(ViKo @ Oct 1 2015, 11:58) Похоже, ...   Oct 1 2015, 09:21
|- - ViKo   Цитата(scifi @ Oct 1 2015, 12:21) Более т...   Oct 1 2015, 09:30
|- - scifi   Фигню я сказал. Очевидно, имеется в виду, что бито...   Oct 1 2015, 09:41
- - esaulenka   А можно ещё вопрос, раз уж битовые поля вспомнили?...   Oct 2 2015, 06:41
|- - zltigo   QUOTE (esaulenka @ Oct 2 2015, 09:41) На ...   Oct 2 2015, 08:59
- - esaulenka   Под "ширпотребом" я подразумевал little-...   Oct 2 2015, 09:32
- - Artem_Petrik   Цитата(esaulenka @ Oct 2 2015, 12:32) Под...   Oct 2 2015, 10:48
- - ViKo   Цитата(Artem_Petrik @ Oct 2 2015, 13:48) ...   Oct 2 2015, 12:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 09:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016