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