Что такое управляемый код
При работе с .NET часто встречается термин "управляемый код". В этой статье объясняется, что означает управляемый код , и приводятся дополнительные сведения о нем.
Проще говоря, управляемый код — это код, выполнение которого управляется средой выполнения. В этом случае соответствующая среда выполнения называется общеязыковой средой выполнения или средой CLR, независимо от реализации (например, Mono, .NET Framework или .NET Core/.NET 5 и более поздних версий). Среда CLR отвечает за получение управляемого кода, его компиляцию в машинный код, а затем его выполнение. Кроме того, среда выполнения предоставляет несколько важных служб, таких как автоматическое управление памятью, границы безопасности и безопасность типов.
Сравните это с запуском программы C/C++, которая также называется "неуправляемым кодом". В мире неуправляемого кода практически за все отвечает программист. Сама программа представляет собой двоичный файл, который операционная система (ОС) загружает в память и запускает. За все остальное — от управления памятью до различных аспектов безопасности — отвечает программист.
Управляемый код пишется в одном из языков высокого уровня, которые могут выполняться в .NET, например C#, Visual Basic, F# и других. При компиляции кода, написанного на этих языках, с помощью соответствующего компилятора вы получаете не машинный код. Вы получаете код промежуточного языка, который затем компилируется и запускается средой выполнения. Язык C++ является исключением из этого правила, так как он позволяет создавать машинные неуправляемые двоичные файлы, которые запускаются в Windows.
Выполнение промежуточного языка &
Что такое "промежуточный язык" (сокращенно IL)? Это результат компиляции кода, написанного на языках высокого уровня .NET. После компиляции кода, написанного на одном из этих языков, вы получаете двоичный файл на базе IL. Важно отметить, что IL не зависит от языка, выполняемого поверх среды выполнения. Для него даже есть отдельная спецификация, с которой при желании можно ознакомиться.
После создания IL из кода высокого уровня вы, скорее всего, захотите запустить его. В этот момент среда CLR берет управление на себя и запускает процесс JIT-компиляции, используя JIT для преобразования кода из промежуточного языка в машинный код, который может выполняться на ЦП. Таким образом, среде CLR точно известно, что делает код, поэтому она может эффективно управлять им.
Промежуточный язык иногда называют языком CIL или MSIL.
Взаимодействие неуправляемого кода
Конечно, среда CLR позволяет передавать границы между управляемым и неуправляемым миром, и есть много кода, который делает это, даже в библиотеках классов .NET. Это называется взаимодействиемили взаимодействием. Все это позволяет вам, например, заключить неуправляемую библиотеку в оболочку и вызвать ее. Но следует отметить, что после того как код пересекает границы среды выполнения, управление выполнением снова осуществляется в виде неуправляемого кода с соответствующими ограничениями.
Аналогично этому язык C# позволяет использовать неуправляемые конструкции, такие как указатели, непосредственно в коде, используя так называемый небезопасный контекст, который обозначает фрагмент кода, выполнение которого не управляется средой CLR.
Дополнительные ресурсы
Обратная связь
Отправить и просмотреть отзыв по