Я пишу виртуальную машину для своего собственного языка программирования в C. Для следующего фрагмента кода:
- commandQueue [] - это последовательный список инструкций, которые должны быть выполнены, а также их аргументы
- commandHead - это индекс текущей выполняемой инструкции (в в примере это расположение аргумента функции, ie переменной).
- callStack [] - это стек вызываемых функций и адреса их переменных
- переменных [] представляет собой массив со всеми фактическими значениями переменных (включая вещи, которые занимают несколько слотов, например векторы).
Обычно каждый раз, когда я обращаюсь к переменной, например, для выполнения операции, я использую макрос, который определяется примерно так:
variables[callStack[instructionQueue[instructionHead] + functionOffset]]
Итак, каждый раз Я хочу получить доступ к переменной, чтобы использовать ее как часть операции, виртуальная машина должна выполнить три доступа к массиву, которые кажется довольно неэффективным. Я все неправильно делаю? Есть ли лучший способ сделать это?