самодельный STL для производительности?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Согласно этой статье, STL не подходит для разработки игр. Что вы думаете об этом?

Мой текущий подход таков: используйте STL, если это приводит к проблемам с производительностью, обменяйтесь с доморощенным контейнером (или распределителем) (еще не пришел к этому, но я не делаю высококачественную 3D-игру;))


stl
person qwerty    schedule 26.03.2009    source источник


Ответы (8)


Ваш подход - единственный разумный вариант в данном случае. Правило № 1 для оптимизации: «Не оптимизируйте, если вы точно не знаете, где находятся узкие места».

Вы по-прежнему сможете относительно легко заменить свой контейнер позже, особенно если вы используете тип, определенный через typedef, вместо прямого использования контейнера STL. Я имею в виду что-то вроде:

#include <vector>

typedef std::vector<int> MyIntVectorType;

int main()
{
   MyIntVectorType theVector; 
}
person Adrian Grigore    schedule 26.03.2009
comment
Удачи вам в том, чтобы разработчики игр приняли правило № 1. :) - person chaos; 26.03.2009
comment
И каков ваш опыт в том, чтобы заставить других принять правило № 1? :) - person chaos; 28.03.2009
comment
Других нет. Мы — компания из двух человек, я единственный, кто пишет реальный код. Кажется, я выиграл! :) - person Adrian Grigore; 28.03.2009

Вы должны знать, что STL делает под прикрытием. Например, если вы используете вектор, например, не позволяйте ему просто увеличиваться произвольно, используйте vector::resize(), чтобы сделать выделение заранее, чтобы он выделялся только один раз. Вроде того. Ваш подход неплох — просто сделайте домашнее задание.

person i_am_jorf    schedule 26.03.2009
comment
Это должен быть vector::reserve() - person kizzx2; 03.08.2010
comment
Видеть? Посмотрите, насколько опасной может быть STL, когда вы не знаете, что делаете. :) - person i_am_jorf; 03.08.2010

Если вы только начинаете программировать игры, продолжайте использовать STL, это здорово и стабильно. Вам лучше иметь что-то, что работает и стабильно, чем начинать чесать на пару кадров в секунду. Однако вот две причины, по которым многие крупные студии его не используют.

  • В какой-то момент вам захочется довести свою систему до предела. Если ваш движок очень большой, оптимизация контейнера — хороший способ добиться успеха во всем (графике, звуке, физике и т. д.). Оптимизация с помощью сборки, наличие различных реализаций контейнера для различного использования станет обязательным. Шаблоны — не самая простая реализация.
  • STL имеет разную реализацию на разных платформах (PS2, PS3, Wii, 360, ПК и т. д.). Если вы работаете на разных платформах, иногда эти различия будут создавать проблемы в самом корне вашей системы, в предполагаемом «коде для всех платформ». Когда это случилось с вами однажды, вы захотите перейти к чему-то, что вы сможете поддерживать более простым способом.

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

person MissT    schedule 26.03.2009

Используйте STL, и если он работает в приемлемом диапазоне производительности, сохраните его. Если нет, попробуйте что-нибудь другое. Вы не хотите переписывать то, что уже существует, прежде чем попробуете существующую реализацию.

person Alex Fort    schedule 26.03.2009

Иногда нужно заменить не контейнер, а содержащийся в нем объект. Однажды у меня был большой std::map со строкой для ключа, и он был слишком медленным. Я понял, что все мои ключи имеют одинаковый размер, поэтому я заменил строковый класс специализированной версией, которую я написал как оболочку для символьного буфера фиксированного размера, и производительность больше не была проблемой.

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

person Mark Ransom    schedule 26.03.2009

Многие проблемы, связанные с исполнением, в C++ были исправлены в C++0x< /а>.

person amit    schedule 26.03.2009

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

person Martin Beckett    schedule 26.03.2009

Вы можете посмотреть что-то вроде EASTL, созданный специально для игр.

Редактировать: Извините, я думал, что ссылка в вопросе была другой статьей.

person Matthew Olenik    schedule 26.03.2009
comment
Эта же ссылка была дана в качестве первой строки вопроса. - person Mark Ransom; 26.03.2009