Здравствуйте, netch80, Вы писали:
N>Здравствуйте, T4r4sB, Вы писали:
TB>>Здравствуйте, netch80, Вы писали:
N>>>Ну если в большинстве корзин 0 или 1 элемент (GCC поддерживает по умолчанию load factor, равный 1) — это совмещено с самими корзинами.
TB>>Каждая корзина — в своей области памяти. Все равно по аллокации на элемент
N>Почему ты так думаешь?
Пртому что указатели на элементы сохраняются при перестроении
N>Смотрю на реализацию GCC. Есть массив корзин, динамически аллоцируемый целым куском. Каждый элемент корзины — структура из значения и указателя на следующий такой же элемент. Для простоты демонстрации это выглядит где-то так:
N>[c++] N>struct bucket_element { N> Value value; // по факту просто область памяти, если !present N> bool present; N> struct bucket_element *next;
А еще там есть using __bucket_type=__node_base*
N>Массив выделяется куском.
Массив указателей на ноды
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте