@Funtik_04

Как clr преобразует c# код в компьютерные команды?

Читаю Рихтера первую главу и немного не понимаю. При компиляции c# файла мы получаем il код, метаданные и заголовки. Но вот что происходит при исполнении программы мне не очень понятно. Clr создает структуру для хранения ссылок методов класса, ок, дальше(как я понял) jit компилятор находит эту ссылку и отправляет нас в методанные в которых тоже находится il код? Или я что-то не правильно понял? И если там не il код, то тогда что? Что происходит дальше мне понятно, jit выделяет память в которую помещает скомпелированный jit код, а потом в структуру созданную clr помещает ссылку на свой скомпилированный код и передает ему выполнение. И еще вопрос, если описать метод в самом файле, то все равно тогда jit будет спрашивать о методе у методанных?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
Выполняется только машинный код, который IT нагенерил, читая IL.
То есть когда твой код выполняется - все указатели в vtable уже ведут на машинный код.

Последний тезис я не смог расшифровать

если описать метод в самом файле, то все равно тогда jit будет спрашивать о методе у методанных?

Если тебе очень интересно, как работает JIT - посмотри доклады от Егора Богатова.

Ну и ещё есть статьи на хабре.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Грубо говоря, генерируются все структуры классов, таблицы виртуальных методов, однако в vtable, все вызовы методов поначалу ведут на вызов jit, те, при вызове метода, вызывается jit, который компилирует il в код машинный и потом подменяет в vtable ссылку на уже сгенерированный код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы