simule - ¿Qué tan caros son los lanzamientos dinámicos en C++?
lanzamiento de dos dados en c++ (4)
¿No puede definir su propia conversión utilizando un #define, que usa dynamic_cast en la construcción de depuración (para que sepa que su conversión es correcta) y una conversión simple (MySubclass *) en la versión de lanzamiento para que no haya costo de rendimiento?
Para mi API GUI que funciona con una variedad de backends (sdl, gl, d3d, etc.) quiero convertir dinámicamente la imagen de tipo genérico a lo que sea que sea.
Así que la conclusión es que estaría haciendo alrededor de 20 * 60 fps dinámicos por segundo.
¿Qué tan caro es un reparto dinámico? ¿Notaré que tiene un impacto negativo notable en el rendimiento? ¿Qué alternativas tengo que mantengan un nivel aceptable de desempeño?
Creo que depende del contexto. Algunos enlaces para ayudarte
http://compgroups.net/comp.lang.c++/dynamic_cast-expensive and http://www.gamedev.net/topic/155192-dynamic_cast--or-ordinary-cast/
En esta circunstancia particular, debería poder organizar su código de modo que el dynamic_cast solo sea necesario una vez. Me imagino que el backend no cambia dinámicamente.
1200 dynamic_cast
s por segundo no es probable que sea un problema de rendimiento importante. ¿Está haciendo un dynamic_cast
por imagen o una secuencia completa de sentencias if
hasta que encuentre el tipo real?
Si le preocupa el rendimiento, las formas más rápidas de implementar el polimorfismo son:
- --- más rápido ---
- Sobrecarga de funciones (solo polimorfismo en tiempo de compilación)
- CRTP (solo polimorfismo en tiempo de compilación)
- Etiquetas, interruptores y conversiones estáticas (frágiles, no admiten herencia de múltiples niveles, un dolor de cabeza por mantenimiento, por lo que no se recomiendan para código inestable)
- Funciones virtuales
- Patrón de visitante (función virtual invertida)
- --- casi tan rápido ---
En su situación, el patrón de visitante es probablemente la mejor opción. Son dos llamadas virtuales en lugar de una, pero le permite mantener la implementación del algoritmo separada de la estructura de datos de la imagen.