Обновить

WXL: как создавать объекты в 15 раз быстрее

Уровень сложностиСложный
Время на прочтение20 мин
Охват и читатели8.1K
Всего голосов 2: ↑1 и ↓10
Комментарии7

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

Вы бы репозиторий с примером открыли, а то ссылка есть, а репозиторий не доступен

Сорри, очистка от тонны экспериментов заняла чуть больше времени, чем ожидалось.
Репы открыты, велкам.

return (top_ = *static_cast<void**>(node)), node;
 (*static_cast<void**>(node) = top_), top_ = node;
return (s_cursor = c1), c;

Не хотелось бы мне сопровождать код написанный в таком стиле.

Привет )

Это классический паттерн однонаправленного списка в аллокаторах через void**.

Не всегда под единственное первое слово блока памяти декларируют аж тип, тем более, что это тоже не совсем корректно, делать простой reinterpret_cast<> к некоему BlockHeader - формально это UB, поэтому уровень "почти асма" именно в этой точке не напрягает (приведение к void** автоматически отсекает рассуждения насчёт "подержки прикладными программистами").

Если уж включать пуризм, то требуется обкладывать через start_lifetime_as из С++23, но я не был уверен, во что это выльется, а тут заведомо знаю во что - паттерн типовой.

Надо будет поэкспериментировать на различных компиляторах, как дойдут руки...

Я не про работу с void*, а про использование оператора запятая для минимизации количества строк кода.

Вся эти тема возникла как фан, где каждый момент будет решен или по-максимому, или никак. ))

Я обязательно перепишу это "как надо", там оператор запятая - вопрос примерно десятый, а промежуточные полумеры ради форматирования исходников плодить неохота (потому что цель как раз уйти от полумер).

Размеры пулов по степеням двойки – это, возможно, хорошо для скорости. Но при большом количестве одновременно живущих небольших объектов такая политика ведет к заметному перерасходу памяти.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации