我们怎么知道设置堆有多大?

时间:2012-11-20 23:07:37

标签: java compiler-construction intermediate-language intermediate-code

我正在尝试将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)。我想知道转换器如何确定堆大小需要是x大小。在Factorial.vapor中,它设置为4。在BubbleSort.vapor中,它设置为12

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

因此,Factorial的对象大小为4,BubbleSort的对象大小为12。