我正在尝试将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)
(其中x
是int
)。我想知道转换器如何确定堆大小需要是x
大小。在Factorial.vapor
中,它设置为4
。在BubbleSort.vapor
中,它设置为12
。
谢谢!
答案 0 :(得分:1)
看起来HeapAlloc
基于您正在创建的结构的大小(假设4
和12
是字节值)。我认为查看数据结构使用的变量,并计算这些变量总和的字节数,可以得到分配的数字。
答案 1 :(得分:0)
如果您注意到,Factorial的Java版本没有数据成员。 BubbleSort的Java版本有两个4字节的整数(总共8个字节)。
大概是对象的“开销”是4个字节(指向类对象的指针的大小)。
因此,Factorial的对象大小为4,BubbleSort的对象大小为12。