Битовые поля, почему конкретная реализация?

Похоже, что битовые поля C / C ++ находят широкое применение в драйверах оборудования и двоичных сетевых передачах.
Однако они, кажется, не используются широко и обычно не поощряются, потому что фактическая двоичная компоновка зависит от реализации, как видно из этой цитаты из стандарта C99 6.7.2.1/10 — «Спецификаторы структуры и объединения»;

Реализация может выделить любой адресуемый блок памяти, достаточно большой для хранения битового поля. Если остается достаточно места, битовое поле, которое непосредственно следует за другим битовым полем в структуре, должно быть упаковано в смежные биты той же единицы. Если остается недостаточно места, определяется ли битовое поле, которое не умещается, в следующем блоке или перекрывает смежные блоки, определяется реализацией. Порядок распределения битовых полей внутри блока (от старшего к младшему или от младшего к старшему) определяется реализацией. Выравнивание адресуемой единицы хранения не указано.

Мой вопрос довольно прост; Почему комитет решил оставить битовые поля для чего-то конкретного для реализации и, таким образом, сделать его конструкцией компилятора, которая в основном может использоваться для сокращения использования памяти, где во многих случаях она могла бы использоваться для обеспечения хороших двоичных разметок, и бесплатно разработчики из битого кода?

10

Решение

По этой же причине в стандарте не указано строгое много других вещей: чтобы обеспечить гибкость при создании совместимого компилятора для большого количества платформ и систем и при этом иметь ЭФФЕКТИВНЫЙ компилятор.

В частности, битовые поля, которые должны храниться в определенном порядке следования битов / байтов, делают его ужасно медленным на машинах, чей естественный порядок следования байтов является «неправильным путем».

Да, это означает, что задняя часть проблемы — сделать битовые поля переносимыми на несколько архитектур и платформ. Если вам это действительно нужно, то, возможно, вам следует рассмотреть какое-то другое решение …

7

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector