Czy STL jest wystarczająco wydajny dla urządzeń mobilnych?

9

Jeśli chodzi o tworzenie gier mobilnych na iOS i Android NDK, niektórzy programiści piszą własne kontenery C ++, podczas gdy inni twierdzą, że STL jest więcej niż wystarczający do tworzenia gier mobilnych (na przykład autor iPhone 3D Programming używa STL zamiast Objective- W swoich przykładach C. Jego obrona polega na tym, że STL nie jest wolniejszy niż Cel C).

Są też programiści mobilni, którzy całkowicie porzucają C ++ i całkowicie opracowują gry w języku C (C89 / C90).

Jakie są zalety i wady każdego podejścia?

mx2
źródło
4
Główną krytyką przeciwko STL są nieprzewidywalne wzorce alokacji pamięci i obsługa kompilatora - oba problemy można rozwiązać za pomocą alternatywy STL, na przykład EASTL lub STLPort.
Raphael R.,
1
Kilka odpowiedzi na to pytanie: gamedev.stackexchange.com/questions/268/... touch na platformach mobilnych i powinna dać ci odpowiedź.
Tetrad
5
Podejrzewam, że dla wielu osób „porzucających” (bardziej jak nigdy nie używających) C ++ na platformach mobilnych mniej chodzi o STL, a więcej o niezręczność Objective-C ++ (i obsługa C ++ ogólnie opóźniona w łańcuchu narzędzi Apple).
Prawdziwe pytanie brzmi: czy możesz pisać lepiej? Lepiej zrozumcie STL; a w przypadkach, gdy nie robi tego, co chcesz, wdrażając wymagane przez ciebie zachowanie.
spowolniłaviar

Odpowiedzi:

6

Pozwól, że powiem ci najpierw. C ++ jest szybszy niż wywołania Objective-C. Cel C korzysta z systemów przekazywania komunikatów, więc będzie miał trochę narzutu w porównaniu do C ++. Wystarczy spojrzeć na niektóre porównania tutaj .

Jeśli chodzi o ogólne opracowanie „aplikacji” na iOS, sensowne jest korzystanie z wbudowanych funkcji Objective-C, ponieważ wydajność nie może być do pewnego stopnia wieloma kryteriami. Ale przy opracowywaniu gier musimy wziąć pod uwagę te wyniki.

Kiedy pracowałem nad moim poprzednim projektem (Robokill), zoptymalizowaliśmy większość kodu tam, gdzie było to konieczne, z wywołaniami zwykłego C (przekonwertowaliśmy naszą klasę cząstek Objective-C na klasę C ++). Lub możesz nawet użyć funkcji środowiska wykonawczego Objective-C do bezpośrednich wywołań C.

Przechodząc do twojego pytania, oto moja odpowiedź: tak, STL jest dobrze zoptymalizowany do swoich celów . Mimo że kod implementacji jest mało czytelny, warto sprawdzić implementację raz.

Możemy jednak do pewnego stopnia zoptymalizować kod Objecive-C, wstępnie buforując wskaźniki funkcji i wykonując wywołania w środowisku wykonawczym Objective-C.

Mam nadzieję że to pomoże!

Ayyappa
źródło