Почему BitFields не плотно упакованы в структуру?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему BitFields не плотно упакованы в структуру?

Сообщение Anonymous »

Если у меня есть эта структура: < /p>

Код: Выделить всё

struct Tuple {
unsigned int a : 4;
unsigned int b : 4;
};
Я ожидал, что у него будет размер один байт, причем оба значения упакованы вместе, но на любом компиляторе, который я пробовал, размер четыре байты ( То же, что и int на моей машине). Меня это очень удивляет, так как эта конструкция теперь занимает больше места, даже двух чар. [*] layout memoryout определяется реализацией
[*] Компиляторы оставляют «отверстия» в структуре для обеспечения эффективного доступа к полям, что приводит к тому, что структуры занимают больше места, чем сумма их полей
Стандарт заставляет порядок полей одинаковым в исходном коде и в памяти < /li>
c и c ++-это разные языки, но это точное явление может быть замеченным на обоих языках для одного и того же куска кода. < /li>
< /ul>
, но мне показалось бы, как упаковка этих значений в одном байте была бы производительность -Benefit как размер сейчас четверть. Неправильные и дополнительные инструкции по обработке двух полей за один бит действительно будут дорогостоящими? (Например, какая -то гарантия о параллелизме или сделках, запрещающей использование двух полей за один байт)
Для чего полезны биты, если я на самом деле не могу определить поля меньше, чем байт?
< /ul>

Подробнее здесь: https://stackoverflow.com/questions/794 ... n-a-struct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»