Мне приходится выполнять много операций с доступом к массиву каждый раз, когда я хочу получить доступ к переменной в виртуальной машине, которую я пишу. Есть ли способ лучше? - PullRequest
0 голосов
/ 06 августа 2020

Я пишу виртуальную машину для своего собственного языка программирования в C. Для следующего фрагмента кода:

  • commandQueue [] - это последовательный список инструкций, которые должны быть выполнены, а также их аргументы
  • commandHead - это индекс текущей выполняемой инструкции (в в примере это расположение аргумента функции, ie переменной).
  • callStack [] - это стек вызываемых функций и адреса их переменных
  • переменных [] представляет собой массив со всеми фактическими значениями переменных (включая вещи, которые занимают несколько слотов, например векторы).

Обычно каждый раз, когда я обращаюсь к переменной, например, для выполнения операции, я использую макрос, который определяется примерно так:

variables[callStack[instructionQueue[instructionHead] + functionOffset]]

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

...