实现虚拟机C++的堆栈
Implement Stack for Virtual Machine C++
最近为了好玩,我决定构建一个玩具编程、编译器和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];
这由你来决定,但通常是这样做的。
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- C++ 在堆栈中包含多态属性的类对象存储
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 在 C++ 中使用链表进行堆栈
- 变量周围的堆栈'...'已损坏
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++线程的可用堆栈大小