Доброго времени суток. Сейчас изучаю технический аспект прохождения высокоуровневого языка к командам процессора на его выполнения на примере C#. Возникли некоторые не ясности, в связи с чем и обращаюсь за помощью. Составил маленькую диаграмму по прохождению кода с IDE к процессору и возникли вопросы:
P.S. Прикрепляю маленький скриншот, как я представляю себе этот процесс.
На каком этапе и какой из компиляторов определяет для разрядности какого процессора нужно преобразование?
Компилятор C# → IL не обращает внимания на разрядность вообще. Он компилирует для формальной стековой машины, а не для физического процессора.
JIT-компилятор запускается в рантайме, при запуске приложения на целевой машине. Соответственно он совершенно точно знает целевой процессор и целевую платформу, и генерирует код для неё. Этот код существует лишь в памяти (а это значит, что при повторном запуске программы JIT-компиляция будет произведена повторно).
Кроме того, возможны различные варианты AOT-компиляции (например, ngen
или .NET Native) вместо JIT, при которой нативный для процессора образ создаётся из IL-кода заранее, до запуска приложения. При этом либо нужно заранее указывать целевую платформу (для .NET Native), либо компиляция сама проходит на целевой платформе (ngen
).
x86/x64/Any Cpu
, то IL код различаться не будет, будет различие только в 1 байте в метаданных сборки. В самом IL нет специфических команд, все они общие для всех разрядностей.В свойствах файла есть поле "Версия файла"Как программно получить версию?
У меня есть TabControl и у него 4 объекта TabItemФон у каждого я менял, но у выбранного Item'a меняется фон на свой