2010-07-18 29 views
5

Estoy interesado en compilar una lista de características de C++ que no son recomendables para su uso en sistemas integrados (y que pueden hacer que las personas recomienden c sobre C++). Intenta agregar por qué si lo sabes o agrega tu por qué a las respuestas de los demás.Qué características de C++ deben evitarse para el desarrollo integrado

Aquí está uno para un comienzo (el único que conozco)

  • polimorfismo dinámico, no sé por qué, pero alguien dijo que es "costosa"

Respuesta

4

Ciertas características requieren soporte en tiempo de ejecución, por lo que si pierde la compatibilidad requerida, debe evitar esas características. En particular, las siguientes características que normalmente se necesitan apoyo en tiempo de ejecución adicional:

  • excepciones
  • RTTI
  • asignación de memoria dinámica
  • herencia virtual (un poco inseguro acerca de esto)

Las personas también suelen mencionar plantillas, pero solo son una función macro avanzada, por lo que puede usarlas libremente en sistemas integrados. Aún así, es posible que desee evitarlos ya que pueden conducir a la inflamación del código después de la compilación.

Su sistema embebido debe venir con documentación que indique qué soporte, en caso de existir, en tiempo de ejecución para C++ (y de lo contrario) está disponible.

+5

La herencia virtual no necesita soporte en tiempo de ejecución. Sin embargo, tiene un costo (una indirección adicional al acceder a los miembros de la clase base). Si necesita evitar ese costo de tiempo de ejecución, entonces debe evitar la herencia virtual. – sbi

3

Debe elegir características dependiendo de tu dispositivo. Podría ser sensato por alguna característica o tal vez no. Depende de su arquitectura. Por ejemplo, Google tiene una versión reducida del compilador C++ para la plataforma Android. La regla común simple es evitar construcciones que darán como resultado un código de tiempo de ejecución pesado.

9

Los estándares de codificación Joint Strike Fighter aquí: http://www2.research.att.com/~bs/JSF-AV-rules.pdf son una muy buena visión general de cómo utilizar C++ para la programación integrada.

La prohibición del polimorfismo dinámico es un vestigio de los años 90, y no tiene una base racional. Ya no es necesario llamar a una función virtual para hacer un cambio y una llamada. Si va a evitar las llamadas a funciones virtuales, también podría estar utilizando C.

2
  1. Uso excesivo de la plantilla. Las múltiples instancias de plantilla con diferentes parámetros darán lugar a múltiples copias de las mismas funciones en su código objeto, aumentando su tamaño, a menos que su compilador sea lo suficientemente inteligente para doblar código idéntico (por ejemplo, si la plantilla depende de un tipo T, la instanciación con int la mayoría de los casos son idénticos a la instanciación con long).
    Una forma de evitar que el tamaño del código aumente con las plantillas, puede escribir una versión central insegura de su código y tener envoltorios delgados de tipo seguro.
  2. dynamic_cast puede ser bastante costoso para la CPU porque necesita escanear la jerarquía de clases y hacer una comparación de cadenas de nombres de clases [cita requerida].
Cuestiones relacionadas