Я реализую виртуальную машину на основе стека, и я пытаюсь читать литературу, которая объясняет или излагает алгоритмы для работы со стеками, но безрезультатно. Вот пример:
int i = 3
int j = 4
int k = 5
Предположим, i
, j
и k
- локальные переменные, поэтому они традиционно хранятся в стеке. Перевод ассемблера / байт-кода будет выглядеть примерно так:
pushi 3
pushi 4
pushi 5
И стек будет: 5 4 3
У меня есть целочисленный стек и стек строк, следовательно, pushi
, однако мой вопрос заключается в том, чтобы не сохранять их в куче (с некоторым ptr*
или буквенным идентификатором), как компилятор или интерпретатор узнает, что если хочу сделать что-то вроде int x = i + j
после определения, я должен выскочить два и три раз соответственно , а также сделать все возможное, чтобы не потерять k
(сохранить в регистр или что-то еще, а затем отправить обратно)?
Я надеюсь, что мой вопрос имел какой-то смысл, и, возможно, есть гораздо более умный подход: P Спасибо за понимание!