为虚拟机C ++实现堆栈

时间:2015-11-29 17:40:19

标签: c++ stack vm-implementation

最近为了好玩,我决定建立一个玩具编程,编译器和vm。在开始实施虚拟机时,我遇到了困难。保存变量和结构的堆栈我实现为每种类型的单独数组。问题是当我有一个结构的引用时,元素没有对齐,int struct.x可能在地址2,而float struct.y可能在地址56,所以通过引用访问struct是不可能的,因为索引不是线性的。我怎么能解决这个问题?

编辑:
    首先,对于每种类型,我的意思是每个原语,其次我知道我可以用工会实现它,但我想知道它是如何在java,c ++或c#中真正实现的,这是一种制作方法一种玩具语言,以便更好地理解你的编程。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您没有真正的选择,只能使用像uin32_t / uint64_t这样的单一数据类型,只需让编译器将值分解为整数

int sp = 0;
uint32_t stack[MAX_STACK_SIZE];

OR

像其他人所说的那样,创建一个堆栈,它是一个联合数组,可能使用标记的联合。一种实现可能是......

union values {
    int i;
    float f;
};
struct Type {
    int tag;
    union values val;
};
Type stack[MAX_STACK_SIZE];

由您来决定这一点,但通常是这样做的。