Недавно для удовольствия я решил построить игрушечное программирование, компилятор и vm. Начав внедрять виртуальную машину, я застрял. Стек, который содержит переменные и структуры, которые я реализовал как отдельные массивы для каждого типа. Проблема в том, что когда у меня есть ссылка на структуру, элементы не выровнены, int struct.x может находиться по адресу 2, а float struct.y может быть по адресу 56, поэтому доступ к структуре по ссылке будет невозможным, потому что индексы не линейны. Как я могу это решить?Реализация стека для виртуальной машины C++
редактировать:
первую очередь для каждого типа я имею в виду для каждого примитива, а второй я знаю, что я мог бы осуществить это с профсоюзами, но я хочу, чтобы узнать, как он на самом деле реализуется в Java, C++ или C#, это своего рода чтобы сделать игрушечный язык, чтобы лучше понять, что вы программируете.
Когда вы говорите отдельный массив для каждого типа, вы имеете в виду каждый примитивный тип? Это не будет работать по той причине, которую вы описываете; вы должны хранить каждый тип класса смежно. Почему не один массив/стек? Или даже добавить один для всех не примитивных типов. (Или, возможно, один массив для каждого требуемого выравнивания.) –
Объявите стек как массив * union *. Поэтому каждый слот в стеке может хранить любую переменную. Отходы памяти, но это всего лишь игрушка, и у вас много. –
Alan Stokes, я не могу объявить массив с разными типами, которым я все еще могу манипулировать, по крайней мере, того, что я знаю в C++. – Coder3000