Boost.Flweight потребление памяти - PullRequest
1 голос
/ 13 октября 2011

Я просто читаю статью о Boost.Flyweight Performance

Как вы видите в ссылке, накладные расходы фабрики составляют
- для hashed_factory: ~2.5 * sizeof (слово)
- для set_factory: 4 * sizeof (слово)

Основной вопрос ... почему 4 слова для набора, а не ноль ?

Насколько я знаю, использование хеша подразумевает вычисление и сохранение ключа хеша, в то время как использование набора не так: он реализован как красно-черное дерево, вставка и поиск занимает log (n),поэтому никакие значения не сохраняются и объем памяти должен быть равен нулю (с недостатком в том, что вместо одного сравнения в случае хэша у вас будут сравнения log (n)).Где ошибка?

1 Ответ

1 голос
/ 13 октября 2011

Каждый узел дерева RB содержит указатель на левый дочерний элемент, указатель на правый дочерний элемент, цвет и один фрагмент данных. Первые три считаются накладными, что означает, что это не 0. Я не совсем уверен, почему они говорят, что это 4, когда 3 элемента легко помещаются в 3 слова, но, возможно, они учитываются во что-то еще (например, указатель родительского узла что не является строго необходимым, или накладные расходы на выделение памяти, хотя это маловероятно).

...