我目前正在构建一个简单的虚拟机作为辅助项目,最终目标是从头开始实现我自己的编程语言。无论如何,我试图松散地复制在 JVM 中看到的许多技术。
我注意到当在 JVM 中调用一个函数时,一个堆栈帧被推送到包含三个部分的调用堆栈上……局部变量数组、操作数堆栈和帧数据。我的问题是 JVM 如何知道要为操作数堆栈部分分配多少空间。是否有一个简单的规则来确定给定函数调用的操作数堆栈应该有多大?
最后,如果操作数堆栈填满会发生什么?堆栈框架是否应该扩展自身以进行补偿?还是应该抛出错误?
compiler-construction jvm
compiler-construction ×1
jvm ×1