¿Qué tan caros son los moldes dinámicos en C++?
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 en lo que sea.
Así que la conclusión es, estaría haciendo alrededor de 20 * 60fps lanzamientos 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 aún mantienen un nivel aceptable de rendimiento?
4 answers
1200 dynamic_cast
s por segundo no es probable que sea un problema de rendimiento importante. ¿Está haciendo una dynamic_cast
por imagen, o una secuencia completa de instrucciones if
hasta que encuentre el tipo real?
Si te preocupa el rendimiento, las formas más rápidas de implementar el polimorfismo son:
- --- el 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 moldes estáticos (frágil, no es compatible con la herencia de varios niveles, un dolor de cabeza de mantenimiento por lo que no se recomienda para el 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-31 14:55:14
¿No puede definir su propio cast usando un #define, que usa dynamic_cast en la compilación de depuración (para que sepa que su cast es correcto) y hace un cast simple (MySubclass *) en la compilación de lanzamiento para que no haya costo de rendimiento?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-17 15:14:44
En esta circunstancia particular, debería ser capaz de organizar su código para que el dynamic_cast solo sea necesario una vez. Me imagino que el backend no cambia dinámicamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-17 16:07:07
Creo que depende del contexto . Algunos enlaces para ayudarle
Http://compgroups.net/comp.lang.c++ / dynamic_cast-expensive and http://www.gamedev.net/topic/155192-dynamic_cast--or-ordinary-cast /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-17 18:28:39