0

我正在尝试将 Java 转换为中间语言,并且正在弄清楚中间语言是如何工作的。

我有原始的 Java 代码:http ://cs.ucla.edu/classes/spring11/cs132/cs132/mj/Factorial.java

我有中间代码表示(VAPOR):http ://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-examples/Factorial.vapor

这是另一组:在 Java 中:http ://cs.ucla.edu/classes/spring11/cs132/cs132/mj/BubbleSort.java

在 VAPOR 中:http ://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-examples/BubbleSort.vapor

我的问题是,所有的 VAPOR 代码都有t.0 = HeapAllocZ(x)(在哪里xint。我想知道转换器如何确定堆大小需要为 size x。在Factorial.vapor中,它设置为4。在BubbleSort.vapor中,它设置为12

谢谢!

4

2 回答 2

1

看起来它HeapAlloc基于您正在创建的结构的大小(假设412是字节值)。我认为查看您的数据结构使用的变量,并计算这些变量总和的字节数会给您分配的数量。

于 2012-11-20T23:19:53.697 回答
0

如果您注意到,Java 版本的 Factorial 没有数据成员。BubbleSort 的 Java 版本有两个 4 字节整数(总共 8 个字节)。

大概一个对象的“开销”是 4 个字节(指向类对象的指针的大小)。

所以 Factorial 的对象大小为 4,BubbleSort 的对象大小为 12。

于 2012-11-20T23:37:28.137 回答