У меня есть следующий цикл, который вызывает все указатели функций в массиве:
for(auto f : program) {
f();
}
Я хотел бы оптимизировать это.До сих пор я пробовал два метода:
- Хвостовая рекурсия
- Код JITting с резьбой
Вот полный код теста: https://coliru.stacked -crooked.com / a / d639f024b1222c54
Результаты синхронизации на моей машине (iMac Pro 8-Core):
naive: 0.530534
tail recursion: 0.265192
JIT threaded: 0.125106
Конечно, все функции должныбыть модифицирован для облегчения рекурсии хвоста, но это нормально.Что было бы менее приятно с точки зрения чистоты кода, так это поместить все в одну функцию и использовать что-то вроде вычисленного goto (на самом деле я тоже пробовал это делать, и вычисляемое goto лишь немного быстрее, чем хвостовая рекурсия на моей машине).
Могу ли я сделать лучше, чем хвостовая рекурсия без JITting? (на iOS JITting не разрешен)
Обратите внимание, что функции нельзя переупорядочивать.