¿El STL es lo suficientemente eficiente para dispositivos móviles?

9

Cuando se trata del desarrollo de juegos móviles en iOS y Android NDK, algunos desarrolladores escriben sus propios contenedores C ++, mientras que otros afirman que STL es más que adecuado para el desarrollo de juegos móviles (por ejemplo, el autor de iPhone 3D Programming usa STL en lugar de Objective- C en sus ejemplos. Su defensa es que STL no es más lento que Objective-C).

Luego también hay desarrolladores móviles que abandonan C ++ por completo y desarrollan juegos por completo (o principalmente) en el lenguaje C (C89 / C90).

¿Cuáles son los beneficios y las desventajas de cada enfoque?

mx2
fuente
44
Las principales críticas contra el STL son sus patrones de asignación de memoria impredecibles y el soporte del compilador; ambos problemas se pueden resolver utilizando una alternativa STL, por ejemplo, EASTL o STLPort.
Raphael R.
1
Varias respuestas de esta pregunta: gamedev.stackexchange.com/questions/268/… toque en plataformas móviles y debería darle su respuesta.
Tetrad
55
Sospecho que muchas de las personas "abandonan" (más bien, nunca usan) C ++ en plataformas móviles, se trata menos de STL y más acerca de la incomodidad de Objective-C ++ (y el retraso de soporte de C ++ en general en la cadena de herramientas de Apple).
La verdadera pregunta es, ¿puedes escribir mejor? Es mejor que comprenda el STL; y en los casos en que no hace lo que quiere, implementa el comportamiento que usted requiere.
deceleratedcaviar

Respuestas:

6

Déjame decirte una cosa primero. C ++ es más rápido que las llamadas Objective-C. Objective-C utiliza sistemas de paso de mensajes, por lo que tendrá una sobrecarga de tiempo de ejecución en comparación con C ++. Solo eche un vistazo a algunas de las comparaciones aquí .

Al llegar al desarrollo general de "aplicaciones" de iOS, tiene sentido utilizar las funciones integradas de Objective-C ya que el rendimiento no puede ser un criterio demasiado importante en cierta medida. Pero en el desarrollo del juego, debemos considerar estos resultados.

Cuando estaba trabajando en mi proyecto anterior (Robokill), optimizamos la mayor parte del código donde sea necesario con llamadas simples (convertimos nuestra clase de partículas Objective-C a una clase C ++). O incluso puede usar las funciones de tiempo de ejecución Objective-C para llamadas directas en C.

En cuanto a su pregunta, aquí está mi respuesta: sí, STL está bien optimizado para su propósito . Aunque el código de implementación no es muy legible, es interesante verificar la implementación una vez.

Sin embargo, podemos optimizar el código de Objecive-C hasta cierto punto, almacenando previamente los punteros de la función y haciendo llamadas con el tiempo de ejecución de Objective-C.

¡Espero que esto ayude!

Ayyappa
fuente