Implementa lo stack per Toy VM C ++

0

Recentemente per divertimento ho deciso di costruire una programmazione giocattolo, un compilatore e un registro di basso livello interpretato vm. Durante l'implementazione della macchina virtuale sono rimasto bloccato. Lo stack che contiene le variabili e le strutture che ho implementato come matrici separate per ogni tipo. Il problema è quando ho un riferimento a una struct gli elementi non sono allineati, int struct.x potrebbe essere all'indirizzo 1, e float struct.y potrebbe essere all'indirizzo 0, quindi l'accesso alla struct da un riferimento sarebbe impossibile, perché gli indici non sono lineari. Come potrei risolvere questo?

stack int:     
//other 0: 5,        
//x 1: 67

stack long:  
//y 0: 56

stack reference:  
//pointer to x, struct access like c array: #00x01

Per ogni tipo intendo per ogni primitivo. So che potrei implementarlo con i sindacati, ma voglio imparare come è realmente implementato in java, c ++ o c #, che è un po 'il punto di fare un linguaggio giocattolo, per capire meglio cosa stai programmando.

    
posta Coder3000 30.11.2015 - 21:00
fonte

1 risposta

2

Sicuramente vai con solo uno stack per tutto.

Hai due opzioni:

  1. Dichiara un "StackEntry" union che può contenere un tipo di dati primitivo, (char, bool, int, ecc.) o un puntatore a struct , quindi creare il tuo stack composto da Sindacati "StackEntry". Ciascuna di queste unioni sarà approssimativamente grande quanto una parola macchina.

  2. Esegui il modo orientato agli oggetti: dichiarare una classe "Object" per rappresentare qualsiasi tipo di oggetto, dichiarare classi derivate, una per contenere ogni tipo di primitivo e una per contenere una struct e rendere il tuo stack una pila di oggetto. Ogni voce dello stack sarà esattamente una parola macchina (un puntatore a un oggetto), ma per ogni voce dello stack sarà presente un intero oggetto assegnato dinamicamente. Ciò andrà peggio, ma sarà molto più ordinato e pulito, risparmiandoti un sacco di mal di testa a lungo termine. (Inoltre, se si tratta di una VM giocattolo, non dovresti davvero preoccuparti delle prestazioni.)

risposta data 01.12.2015 - 00:55
fonte

Leggi altre domande sui tag