¿Cuál es el costo de rendimiento de tener un método virtual en una clase C ++?

Tener al menos un método virtual en una clase C ++ (o cualquiera de sus clases principales) significa que la clase tendrá una tabla virtual, y cada instancia tendrá un puntero virtual.

Así que el costo de la memoria es bastante claro. Lo más importante es el costo de memoria en las instancias (especialmente si las instancias son pequeñas, por ejemplo, si solo están destinadas a contener un número entero: en este caso, tener un puntero virtual en cada instancia podría duplicar el tamaño de las instancias. el espacio de memoria utilizado por las tablas virtuales, supongo que generalmente es insignificante en comparación con el espacio utilizado por el código del método real.

Esto me lleva a mi pregunta: ¿hay un costo de rendimiento medible (es decir, impacto de velocidad) para hacer que un método sea virtual? Habrá una búsqueda en la tabla virtual en tiempo de ejecución, en cada llamada al método, por lo que si hay llamadas muy frecuentes a este método, y si este método es muy corto, ¿podría haber un impacto en el rendimiento medible? Supongo que depende de la plataforma, pero ¿alguien ha ejecutado algunos puntos de referencia?

La razón por la que pregunto es que me encontré con un error que se debió a que un programador se olvidó de definir un método virtual. Esta no es la primera vez que veo este tipo de error. Y pensé: ¿por qué nosotrosañadi la palabra clave virtual cuando sea necesario en lugar de eliminando la palabra clave virtual cuando estamos absolutamente seguros de que esn ¿necesario? Si el costo de rendimiento es bajo, creo que simplemente recomendaré lo siguiente en mi equipo: simplemente hagacad método virtual de forma predeterminada, incluido el destructor, en cada clase, y solo elimínelo cuando sea necesario. ¿Te parece una locura?

Respuestas a la pregunta(9)

Su respuesta a la pregunta