Шестнадцатеричный пакет в C

Я опишу, как компилировать IL-код в собственные инструкции CPU через пример ниже.

public class Example 
{
    static void Main() 
    {
        Console.WriteLine("Hey IL!!!");
    }
}

В первую очередь CLR знает каждую информацию о типе и какой метод вызывается из этого типа, это связано с метаданными.

Когда CLR начинает исполнять IL в командную инструкцию CPU, CLR времени распределяет внутренние структуры данных для каждого типа, на который ссылается код Main.

В нашем случае у нас есть только одна консоль типа, поэтому CLR будет выделять одну внутреннюю структуру данных через эту внутреннюю структуру, мы будем управлять доступом к ссылочным типам

внутри этой структуры данных. CLR имеет записи обо всех методах, определенных этим типом. Каждая запись содержит адрес, в котором может быть найдена реализация метода.

При инициализации этой структуры CLR устанавливает каждую запись в недокументированном FUNCTION, содержащемся внутри самой CLR. И, как вы можете догадаться, эта функция FUNCTION - это то, что мы называем JIT-компилятором .

В целом вы могли бы рассмотреть JIT Compiler как функцию CLR, которая компилирует IL в собственные инструкции CPU. Позвольте мне подробно показать вам, как этот процесс будет в нашем примере.

1. Когда Main делает свой первый вызов WriteLine, вызывается функция JITCompiler.

Функция компилятора 2.JIT знает, какой метод вызывается и какой тип определяет этот метод.

3. Затем Jit Compiler ищет сборку, где определен этот тип и получает IL-код для метод, определенный этим типом в нашем случае IL-код метода WriteLine.

4.JIT-компилятор выделяет блок памяти DYNAMIC, после этого JIT проверяет и компилирует IL-код в собственный код ЦП и сохраняет этот код ЦП в этой памяти block.

5. Затем компилятор JIT возвращается к записи внутренней структуры данных и заменяет адрес (который в основном ссылается на реализацию кода IL-кода WriteLine) с новым динамически созданным блоком памяти с адресами, которые содержат команды нативного процессора от WriteLine.

6. Наконец, функция JIT-компилятора переходит к коду в блоке памяти. Этот код представляет собой реализацию метода WriteLine.

7. После реализации WriteLine код возвращается к Mains'code, который продолжает выполнение как обычно.

0
задан SE-LM 19 March 2019 в 16:24
поделиться