Lookup-Tabelle vs Schalter in C Embedded Software

n einem anderen Thread wurde mir gesagt, dass einswitch kann besser sein als einNachschlagwern Bezug auf Geschwindigkeit und Kompakthei

So würde ich gerne die Unterschiede zwischen diesen verstehen:

Nachschlagwer
static void func1(){}
static void func2(){}

typedef enum
{
    FUNC1,
    FUNC2,
    FUNC_COUNT
} state_e;

typedef void (*func_t)(void);

const func_t lookUpTable[FUNC_COUNT] =
{
    [FUNC1] = &func1,
    [FUNC2] = &func2
};

void fsm(state_e state)
{
    if (state < FUNC_COUNT) 
        lookUpTable[state]();
    else
        ;// Error handling
}

und das

Schalte
static void func1(){}
static void func2(){}

void fsm(int state)
{
    switch(state)
    {
        case FUNC1: func1(); break;
        case FUNC2: func2(); break;
        default:    ;// Error handling
    }
}

Ich dachte, dass eine Nachschlagetabelle schneller ist, da Compiler versuchen, switch-Anweisungen nach Möglichkeit in Sprungtabellen umzuwandeln. Da dies falsch sein kann, würde ich gerne wissen warum!

Danke für Ihre Hilfe

Antworten auf die Frage(12)

Ihre Antwort auf die Frage