Как мы узнаем, насколько велика установка кучи?
Я пытаюсь преобразовать 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
,
Спасибо!
2 ответа
Похоже, HeapAlloc
основывается на размере структуры, которую вы создаете (при условии 4
а также 12
являются байтовыми значениями). Я думаю, что если посмотреть на переменные, которые использует ваша структура данных, и посчитать количество байтов, с которыми эти переменные суммируют, то получим выделенное число.
Если вы заметили, Java-версия Factorial не содержит элементов данных. Java-версия BubbleSort имеет две 4-байтовые вставки (всего 8 байтов).
Предположительно, "издержки" объекта составляют 4 байта (размер указателя на объект класса).
Таким образом, Factorial имеет размер объекта 4, а BubbleSort имеет размер объекта 12.