Что такое управляемый код в C#?

Код, который разработан с использованием среды Common Language Runtime (CLR) платформы .NET, называется управляемым кодом. Другими словами, это код, который выполняется непосредственно на C#. Среда выполнения для управляемого кода предоставляет программисту множество услуг. Предоставляемые услуги: обработка исключений, сборка мусора, проверка типов и т. д. Вышеупомянутые услуги предоставляются программисту автоматически. Помимо вышеперечисленных сервисов среда выполнения также обеспечивает выделение памяти, удаление объектов, создание объектов и т.д.

Преимущества управляемого кода

  • Безопасность кода повышается, так как мы используем среду выполнения, которая защищает от переполнения буфера, проверяя буферы памяти.
  • Сборка мусора осуществляется автоматически.
  • Также предусмотрена динамическая проверка типов или проверка типов во время выполнения.
  • Среда выполнения также выполняет проверку ссылок. Он проверяет, является ли контрольная точка объекта допустимой или нет, а также проверяет, присутствует ли дублирующийся объект или нет.

Недостатки управляемого кода

  • Память не может быть выделена напрямую.
  • В управляемом коде нельзя получить низкоуровневый доступ к архитектуре ЦП.

Что такое неуправляемый код в C#?

Это также известно как небезопасный код. Неуправляемый код зависит от архитектуры компьютера, поскольку он нацелен на архитектуру процессора. В C# такие действия, как управление стеками, выделение памяти, освобождение памяти и т. д., выполняются средой CLR, и, следовательно, эти действия не входят в компетенцию программиста. Программист сообщает компилятору, что управление кодом будет осуществляться им/ею, когда он/она использует ключевое слово «небезопасно». Однако такие проблемы, как утечка памяти, могут возникнуть, если программист пишет плохой код.

Преимущества неуправляемого кода

  • Небезопасный код повышает стабильность и производительность программы
  • Предоставляется низкоуровневый доступ к программатору
  • Небезопасный код обеспечивает среду для взаимодействия с памятью.

Недостатки неуправляемого кода

  • Безопасность приложению не обеспечена
  • Программист должен заниматься обработкой исключений.
  • Нет автоматической реализации сборки мусора
  • Использование небезопасного кода может привести к ошибкам, которые могут возникнуть из-за обхода проверки типов.

Разница между управляемым кодом и неуправляемым кодом

  • Управляемый код — это тот, который выполняется средой CLR платформы .NET, в то время как неуправляемый или небезопасный код выполняется операционной системой.
  • Управляемый код обеспечивает безопасность кода, в то время как неповрежденный код создает угрозы безопасности.
  • В небезопасном или неуправляемом коде модификатор unsafe используется для записи блока кода, в то время как любой другой код, написанный за пределами небезопасного блока кода, является управляемым кодом.
  • Проблемы переполнения буфера памяти не возникают в управляемом коде, так как об этом заботится среда выполнения, но эти проблемы возникают в неуправляемом коде.
  • Службы времени выполнения предоставляются в управляемом коде, но не предоставляются в неуправляемом коде.
  • Исходный код сначала преобразуется в промежуточный язык, а затем в собственный язык в управляемом коде, а в неуправляемом коде он напрямую преобразуется в родной язык.

Ссылка

  1. https://www.partech.nl/en/publications/2021/03/managed-and-unmanaged-code---key-differences#