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:
Nachschlagwerstatic 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
Schaltestatic 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