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でこのタイプの関数のみが使用されるように、typedefされたタイプを持つ必要があります。
2)CでFSMを実装する従来のアプローチでは、状態に列挙型とスイッチベースのディスパッチャーループを使用するため、関数ポインターベースの実装と比較すると、1つの間接レベルがあります。
しかし、よくわかりません。命令キャッシュや分岐予測に問題があるのでしょうか。言い換えれば、私のソリューションを上回ることができる実装が存在する可能性がありますか?
ありがとう。