Rendimiento de std :: function en comparación con el puntero de función raw y void * this?

Código de la biblioteca:

class Resource 
{
public:
    typedef void (*func_sig)(int, char, double, void*);
//Registration
    registerCallback(void* app_obj, func_sig func)
    {
        _app_obj = app_obj;
        _func = func;
    }

//Calling when the time comes
    void call_app_code()
    {
        _func(231,'a',432.4234,app_obj);
    }
//Other useful methods
private:
    void* app_obj;
    func_sig _func;
//Other members
};

Código de solicitud:

class App
{
public:
    void callme(int, char, double);
//other functions, members;
};

void callHelper(int i, char c, double d, void* app_obj)
{
    static_cast<App*>(app_obj)->callme(i,c,d);
}

int main()
{
    App a;
    Resource r;
    r.registercallback(&a, callHelper);
//Do something
}

Lo anterior es una implementación mínima del mecanismo de devolución de llamada. Es más detallado, no admite enlaces, marcadores de posición, etc., como std :: function. Si uso unstd::function oboost::function Para el caso de uso anterior, ¿habrá algún inconveniente en el rendimiento? Esta devolución de llamada estará en el camino muy crítico de una aplicación en tiempo real. He oído que boost :: function utiliza funciones virtuales para realizar el envío real. ¿Se optimizará si no hay vinculantes / marcadores de posición involucrados?

Actualizar

Para aquellos interesados ​​en inspeccionar los ensamblajes en los últimos compiladores:https://gcc.godbolt.org/z/-6mQvt

Respuestas a la pregunta(3)

Su respuesta a la pregunta