Что такое собственный код Visual Studio? [Дубликат]

with open("test.txt", "a") as myfile:
    myfile.write("appended text")
45
задан Joel 13 May 2009 в 03:14
поделиться

4 ответа

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

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

66
ответ дан Anzurio 20 August 2018 в 22:44
поделиться
  • 1
    Компилятор C ++ / CLI позволяет управляемому коду (скомпилированному с /clr и выводить как MSIL) для размещения собственных объектов в нативной куче (без сбора мусора). Кроме того, сборщик мусора (рабочий стол) .NET не использует подсчет ссылок (который имеет проблемы с циклами). – Ben Voigt 19 July 2012 в 23:33
  • 2
    Я нашел этот ответ Бингом. Гораздо лучше объяснил, чем веб-сайт MS. – toddwz 7 March 2016 в 21:16
  • 3
    Native не означает управление памятью. Родной означает, что это приложение Windows или dll. .Net тоже не создается. Он использует то же расширение файла, что и родные приложения, но содержимое этих exe и dll не является окнами exe и dll. Вот почему вы не можете использовать .net & quot; dll & quot; с родным приложением Windows, потому что это не DLL Windows. – William Egge 7 April 2017 в 15:54
  • 4
    Автоматическое управление памятью - лишь малая часть того, что делает язык управляемым. Самое важное отличие состоит в том, что собственный код будет компилироваться в двоичный исполняемый файл, а управляемый код будет компилироваться в байтовый код, который должен интерпретироваться во время выполнения компилятором Just In Time. [Д0] docs.microsoft.com/en-us/dotnet/standard/… – louahola 28 August 2017 в 23:23

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

5
ответ дан Hanu 20 August 2018 в 22:44
поделиться

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

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

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

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

Managed C ++ - это специальная форма C ++, которая выполняется в интерпретаторе .NET.

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

25
ответ дан onedozenbagels 20 August 2018 в 22:44
поделиться
  • 1
    Я просто хотел указать, что существует различие между понятием интерпретируемого языка, таким как Ruby, Python, Lisp и т. Д., И управляемым языком VM, который использует компиляцию JIT, такую ​​как Java и C #. Последнему часто не нужно использовать интерпретатор и, в конце концов, скомпилировать его до собственного машинного кода. Подробнее здесь: ru.wikipedia.org/wiki/Interpreted_language – dodgy_coder 2 May 2012 в 02:27
  • 2
    @dodgy_coder, вы уверены, что Java компилируется на собственный машинный код? Нет, он компилируется до байт-кода, который является не родным машинным кодом. То же самое касается языков CLR, таких как C #. – Pacerier 12 July 2015 в 14:41
  • 3
    Java и C # включают компонент времени выполнения, который JIT компилирует байт-код в собственный код. – dodgy_coder 12 July 2015 в 14:46

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

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

40
ответ дан Wayne Hartman 20 August 2018 в 22:44
поделиться
  • 1
    Пожалуйста, объясните, почему «из-за естественной закрытой архитектуры Microsoft», «переносимость в настоящее время не такая чистая, как Java». Я не понимаю, почему естественная закрытая архитектура Microsoft ограничивает способность .NET быть такой же портативной, как Java. – Pacerier 12 July 2015 в 14:40
  • 2
    @pacerier Мой ответ на ваш вопрос сегодня будет отличаться от того, который я дал шесть лет назад. Шесть лет назад .NET не был открытым исходным кодом, например. Но это заявление, данное довольно недавно, изменяет все в этом отношении, не так ли? :) – Wayne Hartman 12 July 2015 в 19:20
  • 3
    Также важно отметить, что неродные не могут интегрироваться с native. Например, вы не можете создать приложение isapi с .net, потому что оно не создает оконные библиотеки Windows, или вы не можете создавать плагины для собственных приложений с использованием .net, потому что вещи .net make не являются файлами ОС. – William Egge 7 April 2017 в 15:59
Другие вопросы по тегам:

Похожие вопросы: