Apakah STL cukup efisien untuk perangkat seluler?

9

Ketika datang ke pengembangan game mobile di iOS dan Android NDK, beberapa pengembang menulis wadah C ++ mereka sendiri, sementara yang lain mengklaim bahwa STL lebih dari cukup untuk pengembangan game mobile (Misalnya, penulis Pemrograman 3D iPhone menggunakan STL daripada Objective- C dalam contohnya, pembelaannya adalah bahwa STL tidak lebih lambat dari Objective-C).

Lalu ada juga pengembang seluler yang mengabaikan C ++ sepenuhnya dan mengembangkan game sepenuhnya (atau sebagian besar) dalam bahasa C (C89 / C90).

Apa manfaat dan kelemahan dari setiap pendekatan?

mx2
sumber
4
Kritik utama terhadap STL adalah pola alokasi memori yang tidak dapat diprediksi dan dukungan kompiler - kedua masalah dapat diselesaikan dengan menggunakan alternatif STL, misalnya EASTL atau STLPort.
Raphael R.
1
Beberapa jawaban dari pertanyaan ini: gamedev.stackexchange.com/questions/268/… sentuh pada platform seluler dan akan memberi Anda jawaban Anda.
Tetrad
5
Saya menduga bagi banyak orang "meninggalkan" (lebih seperti, tidak pernah menggunakan) C ++ pada platform mobile, ini lebih sedikit tentang STL dan lebih banyak tentang kecanggungan Objective-C ++ (dan C ++ mendukung lagging umumnya pada toolchain Apple).
Pertanyaan sebenarnya adalah, bisakah Anda menulis lebih baik? Anda lebih baik memahami STL; dan dalam kasus-kasus di mana itu tidak melakukan apa yang Anda inginkan, menerapkan perilaku yang Anda butuhkan.
decaviatedcaviar

Jawaban:

6

Biarkan saya memberi tahu Anda satu hal dulu. C ++ lebih cepat dari panggilan Objective-C. Objective-C menggunakan sistem passing pesan sehingga akan memiliki beberapa overhead runtime bila dibandingkan dengan C ++. Lihat saja beberapa perbandingannya di sini .

Datang ke pengembangan "aplikasi" umum iOS, masuk akal untuk menggunakan fungsi bawaan Objective-C karena kinerja tidak dapat menjadi kriteria banyak sampai batas tertentu. Namun dalam pengembangan game, kita perlu mempertimbangkan hasil ini.

Ketika saya sedang mengerjakan proyek saya sebelumnya (Robokill), kami mengoptimalkan sebagian besar kode di mana pun diperlukan dengan panggilan polos-C (kami mengkonversi kelas partikel Objective-C kami ke kelas C ++). Atau Anda bahkan dapat menggunakan fungsi runtime Objective-C untuk panggilan C langsung.

Datang ke pertanyaan Anda, inilah jawaban saya: ya, STL dioptimalkan dengan baik untuk tujuannya . Meskipun kode implementasi tidak banyak dibaca, menarik untuk memeriksa implementasi sekali.

Namun, kita dapat mengoptimalkan kode Objecive-C sampai batas tertentu, dengan melakukan pre-caching pointer fungsi dan melakukan panggilan dengan runtime Objective-C.

Semoga ini membantu!

Ayyappa
sumber