Desempenho de std :: function comparado ao ponteiro de função bruta e void * this?

Código da 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 da Aplicação:

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
}

O acima é uma implementação mínima do mecanismo de retorno de chamada. É mais detalhado, não suporta vinculação, espaços reservados etc., como std :: function. Se eu usar umstd::function ouboost::function para o caso acima, haverá alguma desvantagem de desempenho? Este retorno de chamada estará no caminho muito crítico de um aplicativo em tempo real. Ouvi dizer que o boost :: function usa funções virtuais para fazer o despacho atual. Isso será otimizado se não houver vinculação / espaços reservados envolvidos?

Atualizar

Para aqueles interessados ​​em inspecionar os assemblies nos últimos compiladores:https://gcc.godbolt.org/z/-6mQvt

questionAnswers(3)

yourAnswerToTheQuestion