Возможный дубликат:
Что делает & lsquo; unsigned temp: 3 & rsquo; означает
Я изучаю код ядра и приходил по следующей строке (в Linux 2.4, sched.h, struct mm_struct):
unsigned dumpable:1;
Что это значит?
Возможный дубликат:
Что делает & lsquo; unsigned temp: 3 & rsquo; означает
Я изучаю код ядра и приходил по следующей строке (в Linux 2.4, sched.h, struct mm_struct):
unsigned dumpable:1;
Что это значит?
Это член bitfield. Ваш код означает dumpable
занимает ровно 1 бит в структуре.
Битвые поля используются, когда вы хотите упаковывать элементы на уровне бит. Это может значительно уменьшить размер используемой памяти, когда в структуре имеется много флагов. Например, если мы определим структуру, состоящую из 4 членов с известным числовым ограничением
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
тогда структура может быть объявлена как
struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
тогда биты Foo могут быть расположены как
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
вместо
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
в котором много бит теряются из-за диапазона значений
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
чтобы вы могли сэкономить место, объединив множество членов.
Обратите внимание, что в стандарте C не указывается, как битовые поля расположены или упакованы в "адресный блок хранения". Кроме того, битовые поля медленнее по сравнению с прямым доступом членов.
Это означает, что бит бит - т.е. размер dumpable - это один бит, и вы можете назначить ему только 0 или 1. Обычно используется в старом коде для экономии места или в низкоуровневом коде, который взаимодействует с оборудованием (даже если упаковка не переносима). См. здесь для получения дополнительной информации
Если я правильно помню, когда используется внутри структуры, число после двоеточия означает, сколько битов составляет переменную (или битовое поле).
Итак unsigned dumpable:1;
- однобитовое битовое поле.