Método Virtual Fuera de Línea


¿Qué es exactamente un método virtual fuera de línea y por qué afecta los tiempos de enlace?

Http://llvm.org/docs/CodingStandards.html dice:

Si una clase está definida en un archivo de encabezado y tiene una vtable (o bien tiene métodos virtuales o deriva de clases con métodos virtuales), se siempre debe tener al menos un método virtual fuera de línea en la clase. Sin esto, el compilador copiará la vtable y RTTI en every .o archivo que # incluye el encabezado, hinchazón .o tamaños de archivo y aumento tiempos de enlace.

Author: Yakk - Adam Nevraumont, 2013-05-29

1 answers

El compilador debe emitir una vtable para las clases con métodos virtuales. Esto contiene los punteros a estos métodos. Si todos los métodos virtuales están en línea (definidos en el encabezado), entonces el compilador no sabe qué unidad de traducción (.archivo cpp) para emitir la vtable dentro, por lo que emite una copia en todos ellos y el enlazador se encarga de ello. Esto hace que el trabajo extra y la hinchazón en los archivos objeto. Si, por otro lado, una función virtual se define fuera de línea (en a .cpp), el vtable puede ser emitido allí y, por lo tanto, solo se emitirá una copia. Lo mismo se aplica a la RTTI.

 35
Author: Dark Falcon,
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
2013-05-28 20:50:43