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