Размер bool может варьироваться от ОС к ОС и от языка к языку. Я видел, что это был байт, слово и целое число (что, в свою очередь, может быть чем угодно). Но если sizeof (bool) равен 1, то упакованная структура bools будет 4 (байтами) (т.е. 32 бита)
Вместо того, чтобы возиться с упаковкой и выравниванием, почему бы не использовать:
std::vector<bool>
От: http://www.cplusplus.com/reference/stl/vector/
Это оптимизировано (или должно быть) внутренне, чтобы быть битовым полем. Попробуйте, вы увидите, что используемая память соответствует одному биту на значение.
В противном случае вы всегда можете свернуть свою собственную библиотеку или использовать ограниченные макросы FD_SET.