Управляемая vs неуправляемая память

239
11 января 2018, 19:20

Возможно, это глупый вопрос. Читая книгу Рихтера CLR via C#, в главе 14 наткнулся на неуправляемую память. Ну так вот, чем отличается управляемая и неуправляемая память?

Answer 1

Программа в .NET имеет свой менеджер памяти, который занимается автоматическим выделением памяти под объекты и очисткой памяти после объектов (сборка мусора). Это значит что программист не заботится о выделении памяти и ее очистке. Такой тип памяти называется управляемой памятью. И все объекты, которые вы создаете в .NET располагаются в управляемой памяти. Это все встроенные типы: int, string, double, Array, List<> и т.п. Все они - управляемые объекты и располагаются в управляемой памяти.

Однако, программа работает не только с управляемыми объектами. Часть объектов связана с операционной и файловой системами, с WinAPI, с драйверами, с видеокартой, с сетью и т.д. Понятно, что все эти внешние ресурсы никак не связаны с менеджером памяти .NET и потому на них не распространяется автоматическое распределение памяти. Такая память и такие объекты называются неуправляемыми.

Answer 2

Рихтер, вроде, все подробно объясняет.

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

Неуправляемая память же целиком в руках программист и он хозяин процесса выделения/освобождения памяти.

Answer 3

Скорее подразумевается неуправляемая и управляемая модели памяти. Управляемая отличается от первой тем, что там с объектами работает GC, который память очищает, дефрагментирует, поддерживает актуальность ссылок на лету. Расположение объекта в памяти в каждый момент времени не детерменированно. Ее состояние управляется извне.

В неуправляемой модели ничего такого нет - память выделяется и очищается по требованию самой программы.

READ ALSO
Отображение флеш ролика через Shockwave Flash Object

Отображение флеш ролика через Shockwave Flash Object

В коде страницы сайта вижу следующий скрипт, который выводит ролик:

214
Конвертер Markdown в HTML и обратно на C# или JS

Конвертер Markdown в HTML и обратно на C# или JS

Нужен конвертер Markdown в HTML и обратно средствами C# или JS, есть ли готовые решения?

198
c# Как вызвать метод &ldquo;textBox&rdquo; в windows forms из другого потока чтобы прокрутить в конец списка

c# Как вызвать метод “textBox” в windows forms из другого потока чтобы прокрутить в конец списка

Имеется "textBox" (многострочный), заполняется сообщениями из "serialPort" и при добавлении новых строк прокручивается вверх (как уже все знают)Знаю...

245
Адаптация кода с Java на C# [требует правки]

Адаптация кода с Java на C# [требует правки]

Добрый вечер господа, нужна помощь человека который хорошо разбирается в Java с целью анализа имеющегося исходного кода программы, так как...

202