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

StackOverflow https://stackoverflow.com/questions/334326

Вопрос

Я использую определенную команду в своем коде на C #, которая работает хорошо.Однако говорят, что он плохо себя ведет в "неуправляемом" коде.

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

Это было полезно?

Решение

Вот некоторый текст из MSDN о неуправляемый код.

Некоторый библиотечный код должен вызывать неуправляемый код (например, API машинного кода, такие как Win32).Поскольку это означает выход управляемого кода за пределы периметра безопасности, требуется должная осторожность.

Вот еще несколько дополнительных пояснений к управляемому коду:

  • Код, который выполняется CLR.
  • Код, предназначенный для среды выполнения common language, основы .NET Framework, известен как управляемый код.
  • Управляемый код предоставляет метаданные, необходимые среде CLR для предоставления таких услуг, как управление памятью, межъязыковая интеграция, безопасность доступа к коду и автоматическое управление сроком службы объектов.Весь код, основанный на IL, выполняется как управляемый код.
  • Код, который выполняется в среде выполнения CLI.

Для вашей проблемы:

Я думаю, это потому, что NUnit выполняет ваш код для UnitTesting и может содержать какую-то его неуправляемую часть.Но я не уверен в этом, так что не принимайте это за золото.Я уверен, что кто-нибудь сможет предоставить вам больше информации об этом.Надеюсь, это поможет!

Другие советы

Это хорошая статья на эту тему.

Подводя итог,

<Ол>
  • Управляемый код скомпилирован не в машинный код, а в промежуточный язык, который интерпретируется и выполняется некоторым сервисом на машине и поэтому работает в (надеюсь!) защищенной среде, которая обрабатывает опасные вещи как память и темы для вас. В современном использовании это часто означает .NET, но не обязательно.
  •   

    Прикладная программа, которая выполняется в среде выполнения   установлен в той же машине. Приложение не может работать без него.   Среда выполнения предоставляет общую библиотеку программного обеспечения   подпрограммы, которые программа использует и обычно выполняет память   управление. Это может также обеспечить преобразование в реальном времени (JIT) из   исходный код в исполняемый код или с промежуточного языка на   исполняемый код Java, Visual Basic и .NET Common Language Runtime   (CLR) являются примерами двигателей времени выполнения. ( Подробнее ... )

    1. Неуправляемый код компилируется в машинный код и поэтому выполняется непосредственно операционной системой. Поэтому у него есть возможность делать вредные / мощные вещи, которыми не управляет код. Вот как все работало, поэтому обычно это связано со старыми вещами, такими как .dll.
    2.   

      Исполняемая программа, которая запускается сама по себе. Запущен из операционной   система, программа вызывает и использует программные процедуры в   операционная система, но не требует, чтобы другая программная система была   используемый. Программы на ассемблере, которые были собраны в машину   программ на языке Си и Си ++, скомпилированных в машинный язык для   конкретной платформой являются примеры неуправляемого кода. ( Читать более )

      1. Собственный код часто является синонимом Unmanaged, но не является идентичным.

    Когда вы думаете о неуправляемом , подумайте о машинно-машинном коде. Как и на ассемблере x86. Неуправляемый (нативный) код компилируется и связывается для запуска непосредственно на процессоре, для которого он был разработан, исключая все компоненты ОС на данный момент. Это не портативный, но это быстро. Очень простой, урезанный код.

    Управляемый код - это все, от Java до старого Interpretive BASIC, или все, что работает под .NET. Управляемый код обычно компилируется в P-код промежуточного уровня или набор инструкций байтового кода. Это не машинно-ориентированные инструкции, хотя они похожи на язык ассемблера. Управляемый код изолирует программу от машины, на которой она выполняется, и создает безопасную границу, в которой вся память выделяется косвенно, и, вообще говоря, у вас нет прямого доступа к ресурсам машины, таким как порты, адресное пространство памяти, стек и т. Д. Идея состоит в том, чтобы работать в более безопасной среде.

    Чтобы преобразовать управляемую переменную, скажем, в неуправляемую, вам нужно перейти к самому реальному объекту. Он, вероятно, упакован или упакован в какую-то дополнительную упаковку. Неуправляемые переменные (например, int) на 32-битной машине занимают ровно 4 байта. Нет накладных расходов или дополнительной упаковки. Процесс перехода от управляемого к неуправляемому коду и обратно - называется маршалинг . Это позволяет вашим программам пересекать границу.

    В как можно более кратких словах:

    • управляемый код = .NET -программы
    • неуправляемый код = "обычные" программы

    По сути, неуправляемый код - это код, который не запускается под .NET CLR (он же не VB.NET, C # и т. д.). Я предполагаю, что в NUnit есть runner / wrapper, который не является .NET-кодом (он же C ++).

      

    Управляемый код:
      Код, который работает по «договору о сотрудничестве»; с   общеязыковая среда выполнения. Управляемый код должен предоставлять метаданные   необходимо для выполнения, чтобы предоставить такие услуги, как память   управление, межязыковая интеграция, безопасность доступа к коду и   автоматический контроль времени жизни объектов. Весь код основан на Microsoft   промежуточный язык (MSIL) выполняется как управляемый код.      

    Неуправляемый код:
      Код, который создается без учета   условности и требования общеязыковой среды выполнения. Неуправляемый   код выполняется в общеязыковой среде выполнения с минимальным   сервисы (например, не сборка мусора, ограниченная отладка и   и так далее.

    Ссылка: http: // www. dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx

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

    Управляемый код - это то, что создают компиляторы C # .Net, VB.Net, F # .Net и т. д. Он работает в среде CLR, которая, помимо прочего, предлагает такие службы, как сборка мусора, проверка ссылок и многое другое. Так что подумайте, мой код управляется CLR.

    С другой стороны, неуправляемый код компилируется прямо в машинный код. Он не управляется CLR.

    Управляемый код выполняется внутри среды CLR, т.е. среды выполнения .NET. Короче говоря, все IL управляются code.But, если вы используете стороннее программное обеспечение, например, компонент VB6 или VC ++, они неуправляемый код как среда выполнения .NET (CLR) не контролирует выполнение исходного кода языка.

    Управляемый код: - код, форма MSIL (промежуточный язык) которого разрабатывается после компиляции языкового компилятора и непосредственно выполняется CLR , называемого управляемым кодом. Например: - Весь код на 61 языке поддерживается .net Framework

    Неуправляемый код: - код, разработанный до .net , для которого форма MSIL недоступна и выполняется непосредственно CLR , а не CLR будет перенаправлять на операционную систему, которая называется неуправляемым кодом.

    например: -COM, API Win32

    • Управляемый Код:код, написанный на языке .NET, таком как C #, VB.NET.
    • Неуправляемый Код:код написан не на языке .NET, а на MSIL не понимает, что это такое, и не может запускаться под CLR;как и сторонние элементы управления, которые мы использовали в наших .NET applications, которые не созданы на языках .NET.

    Прежде всего, поймите это, прежде чем .NET Framework , Microsoft предоставляли автономные продукты, такие как MFC (Visual C ++), VB, FoxPro и т. д.

    В 2002 году Microsoft объединила свои продукты и создала .NET Framework. Теперь есть разница между тем, как код выполнялся раньше, и тем, как код управляется и выполняется в .NET Framework. Microsoft представила концепцию CLR с платформой .NET, которая компилирует код, поступающий из любого поддерживаемого языка .NET Framework, и предоставляет дополнительные функции, такие как управление памятью, сборка мусора и т. Д. Но, такие функции CLR ранее не были доступны.

      

    Итак, если вы создаете библиотеку / код в .NET Framework (скомпилировано с   CLR), то это называется Управляемый код . Вы можете использовать эту библиотеку   далее в другом .NET приложении / проекте, и там тоже, CLR будет   понять, как он был скомпилирован раньше, и поэтому он остается вашим   управлять кодом.

    OTOH, если вы хотите использовать библиотеки, которые были написаны до .NET Framework, вы можете сделать это с некоторыми ограничениями, но помните, поскольку CLR там не было в то время, поэтому сейчас CLR не будет понимать и компилировать этот код снова И это будет называться неуправляемый код . Обратите внимание, что библиотеки / сборки, созданные какой-либо третьей стороной для предоставления определенных функций / инструментов, также могут рассматриваться как неуправляемый код, если он не совместим с CLR.

    С точки зрения непрофессионалов, Управление кодом - это то, что ваш CLR понимает и может скомпилировать самостоятельно для дальнейшего выполнения. В .NET Framework (из любого языка, который работает на .NET Framework) Когда код переходит в CLR, код предоставляет некоторую метаданную, чтобы CLR мог предоставить вам функции, указанные здесь . Немногие из них: Сборка мусора, улучшения производительности, межязыковая интеграция, управление памятью и т. Д.

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

    Из Pro C # 5 и .NET 4.5 Framework:

      

    Управляемый и неуправляемый код:   Возможно, самый важный момент, который нужно понять о языке C #, это то, что он может создавать код, который   может выполняться только в среде выполнения .NET (вы никогда не сможете использовать C # для создания собственного COM-сервера или   неуправляемое приложение C / C ++). Официально термин, используемый для описания кода, нацеленного на   .NET Runtime - это управляемый код. Двоичный модуль, содержащий управляемый код, называется сборкой.   (подробнее о сборках чуть чуть). И наоборот, код, который не может быть непосредственно размещен в .NET   среда выполнения называется неуправляемым кодом.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top