STLはモバイルデバイスに対して十分効率的ですか?


9

iOSおよびAndroid NDKでのモバイルゲーム開発に関しては、一部の開発者は独自のC ++コンテナーを作成しますが、STLはモバイルゲーム開発に十分すぎると主張する開発者もいます(たとえば、iPhone 3Dプログラミングの作者は、目的ではなくSTLを使用しています-彼の例ではCです。彼の弁護は、STLがObjective-Cより遅くないことです。

次に、C ++を完全に放棄し、C言語(C89 / C90)で完全に(またはほとんど)ゲームを開発するモバイル開発者もいます。

それぞれのアプローチの長所と短所は何ですか?


4
STLに対する主な批判は、予測不可能なメモリー割り当てパターンとコンパイラーのサポートです。両方の問題は、EASTLやSTLPortなどのSTL代替を使用することで解決できます。
Raphael

1
この質問からのいくつかの回答:gamedev.stackexchange.com/questions/268/… モバイルプラットフォームに触れれば、答えがわかるはずです。
テトラッド2011

5
私は、モバイルプラットフォームでC ++を「放棄」している(多くの場合、今まで使ったことがない)人々の多くは、STLについてではなく、Objective-C ++の厄介さについて(そして、一般に、AppleのツールチェーンでのC ++サポートの遅れ)について疑っています。

本当の質問は、もっと上手に書けるか?STLを理解する方がよいでしょう。そしてそれがあなたが望むことをしない場合、あなたが必要とする振る舞いを実装します。
減速

回答:


6

最初に1つお話ししましょう。C ++はObjective-C呼び出しより高速です。Objective-Cはメッセージパッシングシステムを使用しているため、C ++と比較するとランタイムオーバーヘッドが発生します。ここでいくつかの比較をご覧ください

iOSの一般的な「アプリ」開発については、パフォーマンスをある程度の基準にすることはできないため、Objective-C組み込み関数を使用することは理にかなっています。しかし、ゲーム開発では、これらの結果を考慮する必要があります。

以前のプロジェクト(Robokill)で作業していたときに、プレーンC呼び出しを使用して、必要に応じてほとんどのコードを最適化しました(Objective-CパーティクルクラスをC ++クラスに変換しました)。または、直接C呼び出しにObjective-Cランタイム関数を使用することもできます。

あなたの質問に来て、これが私の答えです:はい、STLはその目的のためによく最適化されています。実装コードはあまり読みやすいものではありませんが、実装を一度確認することは興味深いことです。

ただし、関数ポインターを事前にキャッシュし、Objective-Cランタイムで呼び出しを行うことで、Objecive-Cコードをある程度最適化できます。

お役に立てれば!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.