GM_kring 2022-07-07 15:14 采纳率: 0%
浏览 59
已结题

对于将Int型常量压栈的字节码的一些疑问

1.1给出如下代码片段:

1 public static void main(String[] args) {
2     int i = 5;
3     int j = -1;
4 }

其转换为字节码为:

1 public static void main(java.lang.String[]);
2 Code:
3 0: iconst_5
4 1: istore_1
5 2: iconst_m1
6 3: istore_2
7 4: return
8 }

如图所示,

1.1.1 iconst_5

const指令表示将数据推送至栈顶,但是const的范围非常小,仅包括:

int: -1 ~ 5long , double: 0 ~ 1 , float: 0 ~ 2

对于更大的数,则是采用bipush , sipush , idc指令进行操作。这么做的原因是为什么?

一开始想的是操作更少位的寄存器比如从RAX改为EAX甚至更小的寄存器。后来查看汇编的时候发现iconst操作的还是RAX,所以字节码区分iconst,bipush , sipush , idc的意义是什么?具体好处在哪?

  • 写回答

3条回答 默认 最新

  • GM_kring 2022-07-08 09:35
    关注

    有没有老哥给解答一下,不胜感激!

    评论

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 赞助了问题酬金10元 7月7日
  • 创建了问题 7月7日

悬赏问题

  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异
  • ¥60 具体分析这篇MVC结构springboot框架的安利代码
  • ¥15 lettuce连接哨兵redis,主从切换异常
  • ¥15 ubuntu出现以下问题
  • ¥15 R语言 survIDINRI包已将生存时间转为数值变量,仍错误 Time variable is not numeric。
  • ¥15 在Starccm中相变材料的物理模型该如何选择?