Подтвердить что ты не робот

Что означает синтаксис структуры С++ "a: b"

Если у меня есть структура С++, определяющая 64-битное слово данных, например..

struct SMyDataWord
{
    int Name : 40;
    int Colour : 24;
};

Что означает синтаксис : 40 означает... означает ли это, что первые 40 бит зарезервированы для имени и остальных 24 бит для цвета?

Вот как он, кажется, используется, но я не сталкивался с ним раньше.

4b9b3361

Ответ 1

Битовые поля, переносимые с C. Name, имеют ширину 40 бит, Colour составляет 24 бита в ширину. Следовательно, ваша структура имеет не менее 64 бит. В моей системе 64 бита будут 8 байтов.

Ответ 2

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

Ответ 3

Это определение битового поля.

Name - целое число, способное хранить ровно 40 бит информации. Цвет может хранить 24 бита.

Это часто делается для экономии места в часто требуемых структурах или сжатия кода до размера, который легко обрабатывается для CPU (в вашем случае 64 бит. В точности встраивайте регистр CPU на 64-битной машине).

Однако код, который обращается к битовым полям, будет медленнее.

Ответ 4

Используйте их разумно:

Помните, что почти все о бит - реализация зависимый. Например, будь то биты хранятся слева направо или право налево зависит от фактического аппаратная архитектура. Более того, каждый компилятор использует другой член модель выравнивания, поэтому размер оптимизированного BillingRec составляет 12 байт, а не 9. Вы не можете взять адрес битового поля, и вы не можете создать массивы бит. Наконец, на большинстве реализации использования битовых полей накладные расходы. Поэтому, когда вы оптимизируете свой код, измеряете эффект определенной оптимизации и его компромиссы, прежде чем вы решите использовать он.