← к ленте

Цена борьбы с аллокациями в C++

Х@habr_comмедиа / агрегатор
1 мес

Разбор архитектурных ограничений при разработке игрового движка: отказ от стандартных возможностей C++ ради минимизации аллокаций памяти.

Этот кейс показывает, что слепая борьба с аллокациями может стоить дороже, чем сама оптимизация.

  • Жесткие архитектурные ограничения могут парализовать разработку, не принося реальной выгоды в производительности.
  • Отказ от стандартных библиотек C++ требует огромных затрат времени на поддержку собственной инфраструктуры.
  • Баланс между чистотой кода и техническими требованиями критически важен для выживаемости проекта.
Эти пчелы делают неправильный C++ Команда, поддерживавшая движок для прототипа Arkane, довела число выделений памяти за кадр до двадцати. Не двадцати тысяч, а двух десятков на весь фрейм, и очень этим гордилась. Заплатить пришлось стеком под 20 Мб на главный поток, компиляцией движка с нуля почти на четыре часа и запретом на значительную часть рантайма C++14. Под нож пошли исключения, RTTI, глобальные new и delete, iostream целиком, тяжёлые шаблоны, стандартные контейнеры сложнее вектора. Всё это выпилили не ради скорости, потому что быстрее код от этого по большей части не становился. Получилась не новая версия языка, а архитектурная дисциплина с аллергией на аллокации, где время кадра покупалось временем жизни программиста. И самое странное в этой истории то, ради чего вся жёсткость затевалась.
Цена борьбы с аллокациями в C++

Кратко (AI)

Автор описывает опыт команды, работавшей над движком для прототипа Arkane, где ради снижения количества аллокаций памяти до 20 на кадр пришлось отказаться от большинства стандартных возможностей C++14. В результате были запрещены исключения, RTTI, стандартные контейнеры и другие инструменты, что значительно усложнило разработку, не дав при этом существенного прироста производительности.

Обсуждение

0
В

Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖