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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам