ich schreibe einen einfachen emulator in go (sollte ich? Oder soll ich zurück zu c?). Wie auch immer, ich hole die Anweisung und dekodiere sie. An dieser Stelle habe ich ein Byte wie 0x81, und ich muss die richtige Funktion ausführen.tabelle der funktionen vs schalter in golang
sollte ich habe so etwas wie dieses
func (sys *cpu) eval() {
switch opcode {
case 0x80:
sys.add(sys.b)
case 0x81:
sys.add(sys.c)
etc
}
}
oder so etwas wie dieses
var fnTable = []func(*cpu) {
0x80: func(sys *cpu) {
sys.add(sys.b)
},
0x81: func(sys *cpu) {
sys.add(sys.c)
}
}
func (sys *cpu) eval() {
return fnTable[opcode](sys)
}
1.Welche besser ist?
2.Welche ist schneller?
auch
3.kann ich eine Funktion inline deklarieren?
4.i habe eine cpu
struct
in der ich die Register usw. habe, wäre es schneller, wenn ich die Register und alle als globals habe? (ohne die struct
)
vielen Dank.
Ich wäre überrascht, wenn der Compiler keine Sprungtabelle für so etwas erstellen würde, besonders wenn 'opcode' ein Byte ist. Ich bin interessiert, die Ergebnisse Ihrer Benchmarks zu sehen. –
Nur ein Hinweis für Ihre nächsten Fragen: Ihre Frage 4 steht nicht wirklich zum Thema Ihrer * allgemeinen * Frage. IMO, obwohl eine Frage mehrere Fragen zu Aspekten der allgemeinen Frage/Thema enthalten kann, sollten solche off-topic Dinge in einer separaten Frage gefragt werden. – Kissaki
Überprüfen Sie im Zweifelsfall einfach die Baugruppenausgabe. –