【问题标题】:Minimum Number of Memory Accesses [closed]内存访问的最小数量[关闭]
【发布时间】:2014-01-23 20:12:45
【问题描述】:

考虑java语句的执行

e=(a-b)+(c-d)

使用以下命令所需的最少内存访问次数是多少:

  1. 基于累加器架构的处理器,
  2. 具有至少 4 个通用寄存器的处理器,
  3. 具有基于堆栈的架构的处理器。

【问题讨论】:

  • 我在想象某个 Java 歹徒用枪指着你?您应该将其发布在 policeoverflow 中:/
  • 你尝试了什么?
  • 老兄!做好自己的功课。
  • 在每种情况下,最小值都为零,因为编译器可能会优化计算(gccjavac 编译器可以做到这一点)

标签: java memory architecture stack execution-time


【解决方案1】:

Java代码,编译后的字节码,我们写的不会在处理器上执行,它在JVM上执行。然后,JIT 编译器负责执行该操作,并且 JIT 中的语句 e=(a-b)+(c-d) 的解释对 Java 程序员来说是隐藏的。

JVM 使用堆栈架构,您可以使用 javap 命令查看执行的字节码。

    private static void test(int a, int b, int c, int d) {
    int e = (a - b) +  (c - d);
}

上述方法的字节码是

  private static void test(int, int, int, int);
  flags: ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=4
         0: iload_0
         1: iload_1
         2: isub
         3: iload_2
         4: iload_3
         5: isub
         6: iadd
         7: istore        4
         9: return
      LineNumberTable:
        line 36: 0
        line 37: 9
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0      10     0     a   I
               0      10     1     b   I
               0      10     2     c   I
               0      10     3     d   I
               9       1     4     e   I

根据本例中的字节码,堆栈已被访问 4 次 (i_load)。

【讨论】:

  • 一个商店赚5个。
猜你喜欢
  • 2021-12-31
  • 2015-11-27
  • 2018-08-19
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多