我的问题很可能是平台/编译器/语言特定的,但我会尝试尽可能通用。
当我们调用一个方法时,会为它创建一个 frame ,我们(通常/总是)为数组中的局部变量分配一些空间,返回地址,可能还有其他一些东西,具体取决于我们所依赖的平台。我们也可以让我们的PC指向函数字节码数组的第一项。我的问题出现在这里......
字节码数组只包含操作码及其操作数(对吗?)。在这种情况下,当调用相关方法时,os / runtime应该知道创建局部变量数组需要保留多少空间。我认为该信息可能是已编译的类文件的一部分。那么,实际存储大小信息的位置是什么?它是方法的字节码数组的一部分(除了操作码和操作数)?或者它被保存在其他地方?
为了使问题更清楚,也许这个例子可能有所帮助。例如,当我调用一个函数对象时,我返回的是方法中第一个操作码/指令的地址或者有助于我启动方法框架的地址?
多种方法非常受欢迎。
希望我的问题很清楚
答案 0 :(得分:1)
目前还不清楚您正在谈论哪种语言/平台,但就Java类文件而言,"本地变量的大小" table存储为每个具有代码的方法的Code属性中的字段。
话虽如此,现代JVM在更高的抽象层次上运行。他们不会盲目地解释字节码 - 他们可能会分析和优化字节码,甚至可以将其编译成机器码。