Ist die STL für mobile Geräte effizient genug?

9

Wenn es um die Entwicklung mobiler Spiele unter iOS und Android NDK geht, schreiben einige Entwickler ihre eigenen C ++ - Container, während andere behaupten, dass STL für die Entwicklung mobiler Spiele mehr als ausreichend ist (zum Beispiel verwendet der Autor der iPhone 3D-Programmierung STL anstelle von Objective- C in seinen Beispielen. Seine Verteidigung ist, dass STL nicht langsamer ist als Objective-C).

Dann gibt es auch mobile Entwickler, die C ++ vollständig aufgeben und Spiele vollständig (oder meistens) in der C-Sprache (C89 / C90) entwickeln.

Was sind die Vor- und Nachteile jedes Ansatzes?

mx2
quelle
4
Die Hauptkritikpunkte an der STL sind die unvorhersehbaren Speicherzuweisungsmuster und die Compilerunterstützung. Beide Probleme können mithilfe einer STL-Alternative wie EASTL oder STLPort gelöst werden.
Raphael R.
1
Mehrere Antworten auf diese Frage: gamedev.stackexchange.com/questions/268/… Berühren Sie mobile Plattformen und geben Sie Ihre Antwort.
Tetrad
5
Ich vermute, dass es für viele Leute, die C ++ auf mobilen Plattformen "aufgeben" (eher nicht verwenden), weniger um STL geht als vielmehr um die Unbeholfenheit von Objective-C ++ (und die C ++ - Unterstützung, die im Allgemeinen in Apples Toolchain zurückbleibt).
Die eigentliche Frage ist, können Sie besser schreiben? Sie sind besser dran, die STL zu verstehen. und in den Fällen, in denen es nicht das tut, was Sie wollen, implementieren Sie das gewünschte Verhalten.
verzögertes Kaviar

Antworten:

6

Lassen Sie mich zunächst eines sagen. C ++ ist schneller als Objective-C-Aufrufe. Objective-C verwendet Message-Passing-Systeme, sodass es im Vergleich zu C ++ einen gewissen Laufzeitaufwand hat. Schauen Sie sich hier einige Vergleiche an .

Bei der allgemeinen "App" -Entwicklung für iOS ist es sinnvoll, die in Objective-C integrierten Funktionen zu verwenden, da die Leistung in gewissem Maße kein wesentliches Kriterium sein kann. Bei der Spieleentwicklung müssen wir diese Ergebnisse berücksichtigen.

Als ich an meinem vorherigen Projekt (Robokill) gearbeitet habe, haben wir den größten Teil des Codes bei Bedarf mit einfachen C-Aufrufen optimiert (wir haben unsere Objective-C-Partikelklasse in eine C ++ - Klasse konvertiert). Sie können auch Objective-C-Laufzeitfunktionen für direkte C-Aufrufe verwenden.

Um auf Ihre Frage zu kommen, hier meine Antwort: Ja, STL ist für seinen Zweck gut optimiert . Obwohl der Implementierungscode nicht gut lesbar ist, ist es interessant, die Implementierung einmal zu überprüfen.

Wir können den Objecive-C-Code jedoch bis zu einem gewissen Grad optimieren, indem wir die Funktionszeiger vorab zwischenspeichern und Aufrufe mit der Objective-C-Laufzeit tätigen.

Hoffe das hilft!

Ayyappa
quelle