Какова наилучшая реализация с точки зрения производительности разветвленных вызовов функций?Оптимизация ветвления
В наивном случае у нас есть довольно большой оператор switch, который интерпретирует байт-код и выполняет вызов функции в зависимости от кода.
В нормальном случае мы вычислили gotos и метки, которые делают то же самое.
Каков наилучший способ сделать это?
Абстрактный пример,
schedule: swap_entity(); goto *entity_start(); lb_code1: do_stuff(); goto *next_code_item(); lb_code2: do_stuff(); goto *next_code_item(); ...
Edit: Моя ссылка на "разветвленной вызовы функций", возможно, несколько ошибочно. Выполнение разветвленного кода.
AFAIK, лучше, чем метки первого класса, представляет собой не что иное, как компиляцию JIT, в идеале с некоторой оптимизацией с использованием информации о времени выполнения, чтобы убить все ненужные коды. Но в основном «абсолютный лучший». Пфф. Никогда этого не видел. – gimpf
Согласовано с компиляцией (генерация кода, JIT или иным образом), являющаяся «абсолютной наилучшей». Индексирование в массив указателей функций работает, если все операторы имеют одинаковый тип. –
Абсолютное лучшее, возможно, было глупо говорить, но «более быстрый способ» был бы более точным. – psyeugenic