Я написал виртуальную машину на C, которая имеет таблицу вызовов, заполненную указателями, к функциям, которые обеспечивают функциональность кодов операций виртуальной машины. Когда виртуальная машина запущена, она сначала интерпретирует программу, создавая массив индексов, соответствующих соответствующей функции в таблице вызовов для предоставленного кода операции. Затем он пересекает массив, вызывая каждую функцию до тех пор, пока она не достигнет конца.Функциональные вызовы в производительности убийства виртуальной машины
Каждая инструкция чрезвычайно мала, как правило, одна линия. Идеально подходит для встраивания. Проблема в том, что компилятор не знает, когда будут называться какие-либо инструкции виртуальной машины, как это принято во время выполнения, поэтому он не может их встроить. Накладные вызовы функций и передача аргументов убивают производительность моей виртуальной машины. Любые идеи о том, как обойти это?
Я бы пошел с 'switch' пока. Он чистый, простой и портативный. –
++ Именно поэтому C имеет оператор 'switch'. Поэтому, если вам нужна таблица перехода, вы говорите компилятору, что она может ее создать. И зачем вообще беспокоиться о функциях? Просто расширьте их на месте в инструкции switch или, по крайней мере, наиболее часто исполняемые. Таким образом, вам не нужно надеяться, что оптимизатор сделает то, что вы хотите. –