¿Se puede almacenar en caché una búsqueda de funciones virtuales en C ++?

Digamos que tengo una función virtual llamada foo () en un puntero de clase base abstracta, mypointer-> foo (). Cuando mi aplicación se inicia, según el contenido de un archivo, elige crear una instancia de una clase concreta particular y asigna un mypointer a esa instancia. Para el resto de la vida de la aplicación, mypointersiempre apuntar a objetos de ese tipo concreto. No tengo forma de saber qué es este tipo concreto (puede ser instanciado por una fábrica en una biblioteca cargada dinámicamente). Solo sé que el tipo permanecerá igual después de la primera vez que se realice una instancia del tipo concreto. El puntero no siempre apunta al mismo objeto, pero el objeto siempre será del mismo tipo concreto. Tenga en cuenta que el tipo se determina técnicamente en "tiempo de ejecución" porque se basa en el contenido de un archivo, pero que después de "inicio" (el archivo está cargado) el tipo se corrige.

Sin embargo, en C ++, pago el costo de búsqueda de la función virtual cada vez que se llama a foo durante toda la duración de la aplicación. El compilador no puede optimizar la búsqueda de distancia porque no hay forma de saber que el tipo concreto no variará en el tiempo de ejecución (incluso si fue el compilador más sorprendente de la historia, no puede especular sobre el comportamiento de carga dinámica) bibliotecas). En un lenguaje compilado JIT como Java o .NET, el JIT puede detectar que el mismo tipo se está utilizando una y otra vez y lo hace.almacenamiento en caché en línea. Básicamente estoy buscando una forma de hacerlo manualmente para punteros específicos en C ++.

¿Hay alguna forma en C ++ para almacenar en caché esta búsqueda? Me doy cuenta de que las soluciones pueden ser bastante piratas. Estoy dispuesto a aceptar hacks específicos de ABI / compilador si es posible escribir pruebas de configuración que descubran los aspectos relevantes de ABI / compilador para que sea "prácticamente portátil", incluso si no es realmente portátil.

Actualización: para los detractores: si no valía la pena optimizar esto, entonces dudo que los JIT modernos lo hagan. ¿Crees que Sun y los ingenieros de MS estaban perdiendo el tiempo implementando el almacenamiento en caché en línea, y no lo evaluaron para asegurarse de que había una mejora?

Respuestas a la pregunta(9)

Su respuesta a la pregunta