Ответ 1
Короткий ответ:
- Управляемый код - это код .NET(VB.NET, С# и т.д.), который вы пишете и компилируете в .NET CIL.
- Неуправляемый код - это код, который не находится под .NET, который компилируется для прямого машинного кода.
Длинный ответ:
Что такое управляемый код?
Управляемый код - это то, что создают компиляторы Visual Basic.NET и С#. Он компилируется на Intermediate Language (IL), а не на машинный код, который может запускаться непосредственно на вашем компьютере. CIL хранится в файле, называемом сборкой, вместе с метаданными, которые описывают классы, методы и атрибуты (например, требования безопасности) созданного вами кода. Эта сборка является единым магазином развертывания в мире .NET. Вы копируете его на другой сервер для развертывания сборки там, и часто это копирование является единственным шагом, необходимым для развертывания.
Управляемый код запускается в среде выполнения Common Language Runtime. Среда выполнения предлагает широкий спектр услуг для вашего текущего кода. В обычном ходе событий он сначала загружает и проверяет сборку, чтобы убедиться, что CIL в порядке. Затем, как раз вовремя, как называются методы, среда выполнения упорядочивает их для машинного кода, подходящего для машины, на которой выполняется сборка, и кэширует этот машинный код, который будет использоваться при следующем вызове метода. (Это называется Just In Time, или JIT-компиляция, или часто просто Jitting.)
По мере выполнения сборки среда выполнения продолжает предоставлять такие сервисы, как безопасность, управление памятью, потоки и т.п. Управлением управляет среда выполнения.
Visual Basic.NET и С# могут создавать только управляемый код. Если вы работаете с этими приложениями, вы делаете управляемый код. Visual С++.NET может создавать управляемый код, если хотите: при создании проекта выберите один из типов приложений, имя которых начинается с .Managed., Например,.Managed С++ application..
Что такое неуправляемый код?
Неуправляемый код - это то, что вы используете для создания Visual Studio.NET 2002. Visual Basic 6, Visual С++ 6, черт возьми, даже тот 15-летний компилятор C, который вы все еще можете использовать на своем жестком диске, вызвал неуправляемый код. Он был скомпилирован непосредственно с машинным кодом, который запускался на машине, на которой вы ее скомпилировали, и на других машинах, если они имеют один и тот же чип или почти одинаковый. Он не получал службы, такие как безопасность или управление памятью, из невидимой среды выполнения; он получил их из операционной системы. И что важно, он получил их из операционной системы явно, попросив их, обычно, вызывая API, предоставляемый в SDK Windows. Более поздние неуправляемые приложения получили службы операционной системы через вызовы COM.
В отличие от других языков Microsoft Visual Studio, Visual С++ может создавать неуправляемые приложения. Когда вы создаете проект и выбираете тип приложения, имя которого начинается с MFC, ATL или Win32, вы создаете неуправляемое приложение.
Это может привести к некоторой путанице: при создании приложения .Managed С++ продукт сборки представляет собой сборку CIL с расширением .exe. Когда вы создаете приложение MFC, продукт сборки является исполняемым файлом Windows собственного кода, а также расширением .exe. Внутренняя компоновка этих двух файлов совершенно различна. Вы можете использовать дизассемблер промежуточного языка, ildasm, чтобы заглянуть внутрь сборки и увидеть метаданные и CIL. Попробуйте указать ildasm на неуправляемом exe, и вам скажут, что он не имеет правильного заголовка CLR (Common Language Runtime) и не может быть дизассемблирован. Это же расширение, совершенно разные файлы.
Что относительно собственного кода?
Собственный код фразы используется в двух контекстах. Многие используют его как синоним неуправляемого кода: код, построенный со старым инструментом или преднамеренно выбранный в Visual С++, который не запускается во время выполнения, а вместо этого запускается изначально на машине. Это может быть полное приложение, или это может быть COM-компонент или DLL, вызываемый из управляемого кода с помощью COM Interop или PInvoke, двух мощных инструментов, которые позволяют использовать старый код при переходе в новый мир. Я предпочитаю говорить. Управляемый код. для этого значения, поскольку он подчеркивает, что код не получает службы среды выполнения. Например, защита кода доступа в управляемом коде предотвращает выполнение кода, загруженного с другого сервера, на выполнение определенных деструктивных действий. Если ваше приложение вызывает неуправляемый код, загруженный с другого сервера, вы не получите эту защиту.
Другое использование родного кода фразы - описание вывода компилятора JIT, машинного кода, который фактически выполняется во время выполнения. Это удалось, но это не CIL, это машинный код. В результате не просто предположите, что native = неуправляемый.
(Источник)