В книге пишут, что при запуске программы она компилируется в машинных код из IL, и при каждом следующем до выключения компьютера или перезагрузки запуске программы будет запускаться уже скомпилированная программа, а иначе она заново из IL будет компилироваться в машинный код JIT-компилятором. Так ли это? Есть ли более подробная информация об этом процессе?
Ответ
Когда среда CLR выполняет IL код, то происходит следующее: при вызове блока IL-кода JIT-компилятор проверяет и преобразует его в машинные команды которые он сохраняет в динамическом блоке памяти. Затем, он возвращается к структуре данных типа и заменяет адрес вызываемого метода адресом этого блока памяти и при следующем запросе повторная компиляция не будет выполнена, а будет использован уже скомпилированный код.
Теперь, непосредственно, ответ на ваш вопрос: нет, весь скомпилированный код хранится в динамической памяти, а это значит, что этот код уничтожается при выходе из приложения.
В тоже время, существует способ предварительной компиляции приложения в образ в машинном коде (Native Image) с помощью Native Image Generator (Ngen.exe)
Комментариев нет:
Отправить комментарий