Pull to refresh

Comments 16

Извините, по моему это нечитаемо, как то многовато локального юмора и псевдосарказма, понятного лишь избранным

Как раз фильтр для целевой аудитории) Тот кто никогда не дебажил утечку памяти в 3 часа ночи перед релизом возможно и не поймет, а тот кто в теме, будет кивать на каждом абзаце

Статья не для новичков, скорее свое для своих

Интересно, как там с производительностью OpenMW. Когда его разработка еще велась на GitHub-е, там вовсю использовалась стандартная библиотека с map-ами и dynamic_cast-ы были на каждом шагу. Интересно, как сейчас с этим обстоит дело и стоит ли оно того

std::map и std::set выделяют память на каждую (каждую) вставку

а unordered_map? он вроде резервирует сколько-то заранее?

будет возвращать this, а базовый класс будет возвращать null

забавно, в своём проекте пришёл к такому же решению

стандартный мап без хаков это сбалансированное дерево, обычно красно-чёрное. Каждый элемент дерева это отдельный узел, и для каждого узла выделяется память под сам узел (value + 2–3 указателя + цвет), так что да - память выделяется отдельно при каждой вставке. Держать некий набор узлов про запас это уже отдельные хаки вендора, но например мс таким не страдает, поэтому у них самое медленное дерево. с unordered_map сложнее, там выделяется массив бакетов, но сами ноды через new, т.е. все равно аллокация будет в какомто виде. Если нужно совсем без аллокаций (условно 1 раз на создании), то надо смотреть в сторону flat_has_map, fixed_map и им подобных. Ничего этого в стд нет, flat_map есть в 23 стандарте, но насколько я видел у вендоров... их до сих пор не сделали на конец 25 года, т.е. их по факту нет... с flat_hash_map вообще беда, только сторонние либы

Там ещё обычно на unoredered_map батон крошат по поводу того, что коллизии в нём получаются довольно часто, что превращает его из линейного массива в массив списков со всеми вытекающими.

это особенности использования std релизаций, и это одна из причин, почему в продакшен коде используют альтернативы типа abseil или EASTL, либо резервируют x2-x3 предполагаемого числе итемов и получают нужное поведение

"который и вовсе писал ужас-ужас malloc(sizeof(IMPL_TYPE)), а потом ручками звал конструктор" - тут с лафтаймом проблем точно не будет?

Формально даже по старым стандартам проблем быть не должно, placement new начинает lifetime объекта (https://en.cppreference.com/w/cpp/language/new.html#Placement_new). Разве что с выравниванием могут быть проблемы, но по факту — в 90% систем и компиляторов всё тоже будет ок.

Да, а ещё aligned_alloc, но в статье и комментарии обсуждается именно голый пример "malloc + c-tor", и вот для него формально не всё хорошо.

Более того, сегодня шаблоны используются даже на микроконтроллерах

Их, кстати, используют не от хорошей жизни, а чтобы получить тот самый полиморфизм и не платить за это, zero-cost abstraction как его в книгах называют. На большинстве контроллеров vtable хранится во flash памяти, обращения к которой очень медленные. Да, на камнях пожирнее данные кэшируются, но это только на жирных камнях.

чтобы получить тот самый полиморфизм

наверное, стоило сразу уточнить, что речь про compile-time полиморфизм

"Проклятье пятничного коммита" и "нельзя называть билд финальным" это же не суеверия, это эмпирически подтвержденные законы природы, как закон всемирного тяготения)

Любой кто работал в разработке больше года знает: чем ближе к вечеру пятницы, тем выше вероятность, что безобидная правка в README.md сломает CI/CD и вызовет панику ядра на проде

Такс, а где рассуждения касательно Entity list (система игровых объектов построенная на наследовании + фиксированных компонентах) vs Entity Component (классика, как в юнити) vs ECS? Где рассуждения о том, как лучше подготавливать список объектов для рендера и споры "компонент рендерит сам себя или же предоставляет рендеру абстрактный набор данных для отрисовки"? Где "корутины vs таймеры vs воркеры для deferred задач"?

Интересно будет почитать ваш взгляд на тематические подходы к разработке игр

Я очень плох в плюсах, но статью все еще оценил, она клевая. Напомнило ранние статьи PVS-studio.

Sign up to leave a comment.

Articles