Во-первых, запомните Правила оптимизации .Но это возможно в C или C ++ с использованием битовых полей:
struct mystruct {
unsigned int smallint1 : 3; /* 3 bits wide, values 0 -- 7 */
signed int smallint2 : 4; /* 4 bits wide, values -8 -- 7 */
unsigned int boolean : 1; /* 1 bit wide, values 0 -- 1 */
};
Стоит отметить, что, хотя вы выигрываете, не требуя такого большого объема памяти, вы теряете, потому что становится дороже получить доступ ко всему, поскольку каждое чтение или записьтеперь с ним связана куча немного крутящейся механики.Учитывая, что хранилище дешево, оно, вероятно, не стоит.
Редактировать: Вы также можете использовать vector<bool>
для хранения 1-битных булев;но остерегайтесь этого, потому что это не действует как нормальный vector
!В частности, он не предоставляет итераторов.Это достаточно отличается, что справедливо будет сказать, что vector<bool>
на самом деле не vector
.Скотт Майерс очень четко написал на эту тему в «Эффективном STL».