Разница между нативным и управляемым кодом? - PullRequest
53 голосов
/ 13 мая 2009

Например, когда вы смотрите на сайте профилировщика GlowCode, он говорит:

«Собственный, управляемый и смешанный код C ++, C #, .NET для GlowCode 6.2 и x64»

Что они значат?

Ответы [ 4 ]

73 голосов
/ 13 мая 2009

Собственный код - это код, чья память не является «управляемой», как, например, память не освобождается для вас (например, удаление C ++ и освобождение C), нет подсчета ссылок, нет сборки мусора. Управляемый код, как вы уже догадались, - это код, память которого свободна и выделена для вас, сборки мусора и других полезностей.

Смешанный код - это когда вы управляете кодом, который обращается к неуправляемому слою. Обычно, когда у вас есть чистая неуправляемая C ++ DLL и вы вызываете ее из .NET с помощью P / invoke.

42 голосов
/ 13 мая 2009

Собственный код скомпилирован для работы напрямую с ОС. Управляемый код, однако, предварительно компилируется (байт-код на языке Java), но затем обрабатывается компилятором Just In Time во встроенный код во время выполнения. Управляемый код имеет интересный побочный эффект - он может работать в разных операционных системах, потому что машинный код не создается до тех пор, пока виртуальная машина его фактически не использует. Таким образом, вы можете запускать приложения .NET в Windows, а также запускать их в Linux или Mac, на которых установлена ​​среда выполнения Mono. Переносимость в настоящее время не так чиста, как в Java (из-за естественно закрытой архитектуры Microsoft), но концепция остается.

Если вы запускаете неуправляемое приложение, код был скомпилирован для запуска для указанной ОС / оборудования. Любая переносимость в другую ОС / набор инструкций потеряна и должна быть перекомпилирована для выполнения.

29 голосов
/ 14 мая 2009

Собственный код написан на «родном» машинном языке компьютера, на котором он работает, и исполняется непосредственно процессором.

Управляемый код написан на специальном языке, который требует другой программы для его запуска (т.е. управления). Эту другую программу часто называют переводчиком, поскольку она интерпретирует специальный язык.

Программы на C и C ++ являются родными.

Java и C # (и все языки .NET в этом отношении) управляются.

Управляемый C ++ - это особая форма C ++, которая работает в интерпретаторе .NET.

Смешанная программа - это программа, которая использует как собственный, так и управляемый код.

6 голосов
/ 10 июня 2013

Код, который выполняется под управлением общеязыковой среды выполнения (CLR), называется управляемым кодом. Код, который не запускается в среде CLR, называется собственным кодом.

...