Для минимально возможного объема памяти не следует использовать std::bitset
.Это, вероятно, потребует больше памяти, чем обычный встроенный тип, такой как char
или int
эквивалентного эффективного размера.Таким образом, он, вероятно, имеет накладные расходы памяти, но сколько будет зависеть от реализации.
Одним из основных преимуществ std::bitset
является то, что он освобождает вас от аппаратно-зависимых реализаций различных типов.Теоретически, аппаратное обеспечение может использовать любое представление для любого типа, если оно удовлетворяет некоторым требованиям стандарта C ++.Таким образом, когда вы полагаетесь на unsigned char t1 = 1
, чтобы быть 00000001
в памяти, это на самом деле не гарантируется.Но если вы создадите набор битов и инициализируете его должным образом, это не принесет вам неприятных сюрпризов.
Заметка о битрейдлинге: принимая во внимание подводные камни, связанные с манипулированием битами таким образом, можете ли вы действительно оправдать эту ошибку?склонный метод вместо использования std::bitset
или даже такие типы, как int
и bool
?Если вы не очень ограничены в ресурсах (например, программирование MCU / DSP), я не думаю, что вы можете.
Те, кто играет с битами, будут кусаться, а те, кто играет с байтами, будут байтены..
Кстати, char bitField
, который вы объявляете и управляете с помощью битовых операторов, является битовым полем, но это не понятие языка C ++ о битовом поле, которое выглядит следующим образом:
struct BitField{
unsigned char flag1 : 1, flag2 : 1, flag3 : 1;
}
Проще говоря, это структура данных, элементы данных которой подразделяются на отдельные переменные.В этом случае unsigned char
из (предположительно) 8 битов используется для создания трех 1-битных переменных (flag1
, flag2
и flag3
).Он явно подразделяется, но, в конце концов, это просто игра с компилятором / языком, похожая на ту, что вы делали выше.Вы можете узнать больше о битовых полях здесь .