Достаточно ли эффективен STL для мобильных устройств?

9

Когда дело доходит до разработки мобильных игр на iOS и Android NDK, некоторые разработчики пишут свои собственные контейнеры на C ++, в то время как другие утверждают, что STL более чем достаточно для разработки мобильных игр (например, автор 3D-программирования для iPhone использует STL, а не Objective- С в своих примерах. Его защита заключается в том, что STL не медленнее, чем Objective-C).

Кроме того, есть разработчики мобильных приложений, которые полностью отказываются от C ++ и полностью (или в основном) разрабатывают игры на языке C (C89 / C90).

Каковы преимущества и недостатки каждого подхода?

mx2
источник
4
Основная критика в отношении STL - это непредсказуемые шаблоны распределения памяти и поддержка компилятора - обе проблемы можно решить с помощью альтернативы STL, например EASTL или STLPort.
Рафаэль Р.
1
Несколько ответов на этот вопрос: gamedev.stackexchange.com/questions/268/… коснитесь мобильных платформ и должны дать вам ответ.
Тетрад
5
Я подозреваю, что многие люди «отказываются» (скорее, никогда не используют) от C ++ на мобильных платформах, речь идет не столько о STL, сколько о неловкости Objective-C ++ (а поддержка C ++ вообще отстает от набора инструментов Apple).
Вопрос в том, можешь ли ты написать лучше? Вам лучше понять STL; и в случаях, когда он не делает то, что вы хотите, реализуя поведение, которое вам так требуется.
замедленная

Ответы:

6

Позвольте мне сначала сказать вам одну вещь. C ++ быстрее, чем вызовы Objective-C. Objective-C использует системы передачи сообщений, поэтому он будет иметь некоторые накладные расходы по сравнению с C ++. Просто взгляните на некоторые сравнения здесь .

Переходя к общей разработке приложений для iOS, имеет смысл использовать встроенные функции Objective-C, поскольку производительность в некоторой степени не может быть критерием. Но при разработке игр мы должны учитывать эти результаты.

Когда я работал над моим предыдущим проектом (Robokill), мы оптимизировали большую часть кода там, где это было необходимо, с помощью вызовов обычного C (мы преобразовали наш класс частиц Objective-C в класс C ++). Или вы можете даже использовать функции времени выполнения Objective C для прямых вызовов языка C.

Возвращаясь к вашему вопросу, вот мой ответ: да, STL хорошо оптимизирован для своих целей . Несмотря на то, что код реализации не очень читабелен, интересно проверить реализацию один раз.

Тем не менее, мы можем оптимизировать код Objecive-C до некоторой степени, предварительно кэшируя указатели на функции и совершая вызовы во время выполнения Objective-C.

Надеюсь это поможет!

Ayyappa
источник