我正在尝试在 C 中实现有限状态机,并且需要它非常快。所以我决定使用函数指针作为“状态”:
void *state1(void){ /* function body here */ }
void *state2(void){ /* ... */ }
void *state3(void){ /* ... */ }
然后,主 FSM 循环可以非常简单:
void *(*fp)(void);
fp = state1;
while(fp)
fp = fp();
有一个问题:
1) 是否可以避免在函数返回类型中使用 void 指针?理想情况下,状态函数应该具有某种类型定义的类型,以确保在 FSM 中仅使用具有这种类型的函数。
2)在 C 中实现 FSM 的传统方法是使用枚举作为状态和基于开关的调度程序循环,因此与基于函数指针的实现相比,会有一个间接级别。
但我不确定,指令缓存或分支预测是否存在一些问题?换句话说,是否存在可以胜过我的解决方案的实现?
谢谢。