2011-05-30 1 views
0

У меня есть вопрос оптимизации памяти.Что потребляет больше места для хранения - boost :: dynamic_bitset <> или необработанное хранилище?

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

boost::dynamic_bitset<> 

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

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

  • повышение :: dynamic_bitset <> (4096, ложный);
  • CKnot Узел [4096] // содержит один BOOL

Благодаря

+1

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

+0

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

ответ

6

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

+0

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

+0

@Jan sizeof (bool) - это реализация определена - см. C++ Standard 5.3.3. Он имеет целостный тип, но это не значит, что он должен быть того же размера, что и целое число ain, которое я использую для обозначения 'int'. –

Смежные вопросы