Что потребляет больше места для хранения — boost ::dynamic_bitset или необработанное хранилище?

#c #boost #boolean #data-storage

#c #повышение #логическое #хранилище данных

Вопрос:

У меня есть вопрос по оптимизации хранилища программы.

У меня, скажем, 4096 «узлов», хранящихся в:

   boost::dynamic_bitset<>
  

Сейчас я рассматриваю возможность рефакторинга моей программы и создания CKnot класса, который будет содержать bool .

Вопрос в том, что будет занимать больше места:

  • boost ::dynamic_bitset<> ( 4096 , false );
  • CKnot Узел [4096] //содержит один bool

Спасибо

Комментарии:

1. Это не будет иметь большого значения. Метод статического массива будет быстрее, потому что он поместится на 1 страницу памяти!!

2. если я увеличу количество узлов с 4096 (= 2 ^ 12) до 2 ^ 30, что является моей конечной целью. Будет ли это иметь значение? или все еще нет?

Ответ №1:

Набор битов будет значительно меньше, поскольку bool в C должен иметь размер не менее байта, тогда как каждый бит в наборе битов равен именно этому, биту.

Комментарии:

1. Фактически, bool в C имеет тот же размер, что и integer. Чтобы уменьшить его размер, вы должны использовать bitfield, которое может сокращать отдельные элементы до отдельных битов, но содержащий их объект все равно должен быть не менее одного байта.

2. @Jan sizeof(bool) определяется реализацией — см. Стандарт C 5.3.3. Он имеет целочисленный тип, но это не значит, что он должен быть того же размера, что и целое число, что я подразумеваю int .