为了账号安全,请及时绑定邮箱和手机立即绑定

istore 指令是否从 main 方法中的索引 1 开始?

istore 指令是否从 main 方法中的索引 1 开始?

MMTTMM 2023-11-01 16:36:08
鉴于指令istore_<n>及其文档:n 必须是当前帧的局部变量数组的索引(第 2.6 节)。它没有指定它从哪个索引开始。我假设为 0。对于给定的 istore 操作,它应该增加 1。给定一个简单的类:public class TestingStuff {    public static void main(String[] args) {        int a = 11;        int b = 12;    }    public static void test() {        int c = 13;        int d = 14;    }}我希望这两种方法有不同的框架。a那么这应该意味着存储和的指令b将是istore_0和istore_1。c以及用于存储和 的相同索引d。但由于某种原因,main方法中的索引从 开始1。这似乎总是如此。但我找不到任何有关原因的信息。javap 的输出:  public static void main(java.lang.String[]);    descriptor: ([Ljava/lang/String;)V    flags: ACC_PUBLIC, ACC_STATIC    Code:      stack=1, locals=3, args_size=1         0: bipush        11         2: istore_1         3: bipush        12         5: istore_2         6: return  public static void test();    descriptor: ()V    flags: ACC_PUBLIC, ACC_STATIC    Code:      stack=1, locals=2, args_size=0         0: bipush        13         2: istore_0         3: bipush        14         5: istore_1         6: return是这样吗?如果是这样,为什么?
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

静态方法的参数作为从位置 0 开始的局部变量传入。因此,对于,数组位于位置 0 的局部变量中。编译执行某些操作的代码应该可以证明这一点,尽管我没有编译器便利。mainargsargs

(对于实例方法,this位于位置 0,然后其余参数从位置 1 开始。)

查看完整回答
反对 回复 2023-11-01
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信