Начал перечитывать и конспектировать книгу, решил поделится что успел записать, мейби кому-то надо. Что такое CLR CLR - Common Language Runtime (общеязыковая среда выполнения) Крч, это готовый набор механизмов (типо управлению памятью, исключения, потоки и пр.). Некоторые языки, к примеру, такие как C# или С++/CLI юзают ее, то есть код из своего говноситаксиса компилируют в богоудоный код. По сути не важно на чем ты пишешь свое приложение, в конечном итоге оно будет скомпилировано в IL код. Не во всех языках есть такая фича!!! Файлы, которые мы скармливаем CLR - PE32/PE32+ (portable executable) (managed module) - сборка assembly. Еще эта залупа оснащена (модули) оснащены Data Execution Prevention и Address Space Layout Optimization - че это такое хз? Но это для безопасности. Сборка assembly Это крч херня, в которой может быть куча управляемых модулей. По сути это и есть управляемый модуль. В сборке также есть Манифест, в котором, описаны количество управляемых модулей, прочие файлы, экспортируемые типы. Суть ее в том что, можно использовать ее многократно, это вроде безопасно, можно версии разные делать). Clr сама найдет нужные зависимости и подянет их (не чудо ли это?). Из чего состоит управляемый модуль Заголовок PE32 - че за файл (Dll, Gui и прочее), временная метка сборки. Загаловок CLR - какая версия нужна, метод метаданных, точку входа в программу, расположение и размер: ресурсов, метаданных. Метаданные IL код Метаданные в управляемых модулях Метаданные хранят информацию о типах данных, типах данных на которые ссылается код (библиотеки ебанные). Они неразрывно связаны с файлом IL кода (нашего говнокода). InteliSense (херня, которая дает подсказки во время написания кода) использует метаданные, чтобы читать, какой ты метод хочешь впихнуть и достает оттуда параметры, к примеру. Также верификация CLR на безопасные по отношению к типам операции использует метаданные (ну типо чтобы ты в коробку с яблоками не положил бананы, все это проверяется с помощью метаданных). Сборщик мусора юзает метаднные, чтобы узнать куда твой говнокласс ссылается еще. Крч это что-то типо файлика где написано что класс собака это собака, а не ебучий попугай. Можно не рыться в где-то в залупе, а в метаданных узнать что собака имеет имя, рост, вес, зарплату в долларах (?). JIT компилятор Just in time преобразует IL код в машинный код. Когда мы обращаемся в коде к методу, он сначла компилируется JIT компилятором, после хранится в памяти, меняет в типах данных CLR адрес на блок памяти, в котором машинные команды. Компилирует один раз, после можно обращаться без компиляции. (после закрытия приложения все по новой :( ) А еще он умеет оптимизировать код Крч, он убирает условия, которые никогда не выполнятся. Оптимизирует инструкции в зависимости от процессора. IL код C# → IL code → Машинный код IL код легче, следовательно меньше весит EXE. Его не так сложно читать как машинный код IL код стековый язык. Все инструкции заносятся в исполнительный стек, после результаты можно получить из того же стека. IL коду похуй на ваши регистры или разрядность системы, он сам все разрулит. Тем самым ты можешь абстрагироваться и не думать че там под капотом. Также можно верефицировать IL код и получать ошибки во время компиляции (из C# в IL). Допустим проверять все ли параметры есть или return конструкции. Это дает безопасность. Также оно гарантирует что ты не сломаешь другое приложение, чтение или записью в другие участки памяти. Исполнение кода Сначала CLR смотрит в точку входа (Метод Main допустим). Ищет куда мы ссылаемся в этом методе и выделяет структуры данных (допустим Console), дергает структуру методов (внутри есть записи с адресами на реализацию этого метода). Понятное дело что тут не все, мейби потом по мере наполнения моего конспекта - выложу.
vtlstolyarov, чтобы критиковали и исправляли неточности) перед собеседованием можно быстро пройтись и там же козырнуть. да и позволит козырнуть перед переподом, зная хоть какую-то информацию. Раньше я тупо читал книги, а сейчас понял, что мне не хватает такой базы знаний. Поэтому и начал вести для себя, возможно кто-то будет юзать в своих целях.
Widness, Повторюсь - всё это поможет тебе, потому что это твой конспект. Всем остыльным твой поток мыслей не поможет от слова "совсем". Могу даже конкретным примером показать - IL код легче, следовательно меньше весит EXE. Его не так сложно читать как машинный код - никто никогда не поймёт что ты хотел сказать этим предложением, потому что отдельные слова имеют смысл, но сама фраза - полностью бессмыссленна.