实现虚拟机C++的堆栈

Implement Stack for Virtual Machine C++

本文关键字:堆栈 C++ 虚拟机 实现      更新时间:2023-10-16

最近为了好玩,我决定构建一个玩具编程、编译器和vm。在开始实现虚拟机时,我陷入了困境。堆栈,其中包含我为每种类型实现的作为单独数组的变量和结构。问题是,当我引用一个结构时,元素没有对齐,int struct.x可能在地址2,float struct.y可能在地址56,所以通过引用访问该结构是不可能的,因为索引不是线性的。我该如何解决这个问题?

编辑:
首先,对于每种类型,我指的是每种基元,其次,我知道我可以用并集来实现它,但我想学习它是如何在java、c++或c#中真正实现的,这是制作一种玩具语言的意义所在,以更好地理解你在编程什么。

在这种情况下,您别无选择,只能使用单一的数据类型,如uin32_t/uint64_t,然后让编译器将值分解为整数

int sp = 0;
uint32_t stack[MAX_STACK_SIZE];

就像其他人所说的,创建一个由并集组成的数组堆栈,可能使用一个标记的并集。一种实现方式可能是…

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

这由你来决定,但通常是这样做的。