¿Los punteros de función hacen que se borre una línea de instrucciones?

Las CPU modernas tienen una amplia canalización, es decir, están cargando las instrucciones y los datos necesarios mucho antes de que realmente ejecuten la instrucción.

A veces, los datos cargados en la tubería se invalidan, y la tubería se debe borrar y volver a cargar con datos nuevos. El tiempo que se tarda en rellenar la tubería puede ser considerable y provocar una desaceleración del rendimiento.

Si llamo a un puntero de función en C, ¿es la canalización lo suficientemente inteligente como para darse cuenta de que el puntero en la tubería es un puntero de función, y que debería seguir ese puntero para las siguientes instrucciones? ¿O el hecho de tener un puntero de función hará que la tubería se borre y reduzca el rendimiento?

Estoy trabajando en C, pero imagino que esto es aún más importante en C ++ donde muchas llamadas de función se realizan a través de v-tables.

editar

@JensGustedt escribe:

Para ser un verdadero éxito en el rendimiento de las llamadas a funciones, la función a la que llama debe ser extremadamente breve. Si observa esto midiendo su código, definitivamente debería volver a visitar su diseño para permitir que esa llamada esté en línea.

Desafortunadamente, esa puede ser la trampa en la que caí.

Escribí la función de destino pequeña y rápida por razones de rendimiento.

Pero se hace referencia a un puntero de función para que pueda ser reemplazado fácilmente por otras funciones (¡Simplemente haga que el puntero haga referencia a una función diferente!). Como me refiero a él a través de un puntero de función, no creo que pueda estar en línea.

Entonces, tengo una función extremadamente breve, no en línea.

Respuestas a la pregunta(4)

Su respuesta a la pregunta