Как мы узнаем, насколько велика установка кучи?

Я пытаюсь преобразовать 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.

Другие вопросы по тегам