#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
.