方法框架 - 如何创建局部变量数组?

问题描述 投票:0回答:1

我的问题很可能是平台/编译器/语言特定的,但我会尝试尽可能通用。

当我们调用一个方法时,会为它创建一个框架,我们(通常/总是)为数组中的局部变量分配一些空间,返回地址,可能还有一些其他东西,具体取决于我们所在的平台。我们也可以将PC指向函数字节码数组的第一项。我的问题出现在这里......

该字节码数组只包含操作码及其操作数(对吗?)。在这种情况下,当调用相关方法时,os / runtime应该知道创建局部变量数组需要保留多少空间。我认为该信息可能是已编译的类文件的一部分。那么,实际存储的大小信息在哪里?它是方法的字节码数组的一部分(除了操作码和操作数)?或者它保存在别的地方?

为了使问题更清楚,也许这个例子可能有所帮助。例如,当我调用一个函数对象时,我返回的是方法中第一个操作码/指令的地址或者有助于我启动方法框架的地址?

多种方法非常受欢迎。

希望我的问题很明确

function-pointers bytecode local-variables callstack function-call
1个回答
1
投票

目前还不清楚你在谈论哪种语言/平台,但在Java类文件的情况下,“局部变量”表的大小存储为每个具有代码的方法的Code属性中的字段。

话虽这么说,现代JVM在更高的抽象层次上运行。它们不仅盲目地解释字节码 - 它们可以分析和优化字节码,甚至可以将其编译成机器码。

© www.soinside.com 2019 - 2024. All rights reserved.