Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

CIL-код, генерируемый для ключевого слова new

Определение вложенных типов | Обработка исключений | Void main () | Составляющие процесса обработки исключений в .NET | Генерация общего исключения | Перехват исключений | Создание специальных исключений, способ первый | Обработка нескольких исключений. | Блок finally | Время жизни объектов |


Читайте также:
  1. I. Перепишите следующие предложения. Определите по грамматическим признакам, какой частью речи являются слова, оформленные окончанием
  2. I. ПЕРЕПИШИТЕ СЛОВА И ВЫРАЖЕНИЯ В СВОЙ СПОРТИВНЫЙ СЛОВАРЬ, НАПИШИТЕ ИХ ТРАНСКРИПЦИЮ, ПОЛЬЗУЯСЬ АНГЛО-РУССКИМ СЛОВАРЕМ, И ВЫУЧИТЕ ИХ.
  3. I. Письменно переведите текст на русский язык. Выпишите 20 слов на экономическую тему с транскрипцией и переводом. Выучите эти слова наизусть.
  4. I. Письменно переведите текст на русский язык. Выпишите 20 слов на экономическую тему с транскрипцией и переводом. Выучите эти слова наизусть.
  5. II. Работа со словами, обозначающими предметы и действия.
  6. II. Работа со словами, обозначающими признак предмета.

При обнаружении ключевого слова new компилятор С# вставляет в реализацию метода CIL -инструкцию newobj. Если скомпилировать текущий пример кода и заглянуть в полученную сборку с помощью утилиты ildasm.exe, то можно обнаружить внутри метода Main() следующие CIL -операторы:

Рассмотрим роль CIL -инструкции newobj.

Дна начала важно понять, что управляемая куча представляет собой нечто большее, чем просто случайный фрагмент памяти, к которому CLR получает доступ. Сборщик мусора .NET "убирает" кучу довольно тщательно, причем (при необходимости) даже сжимает пустые блоки памяти с целью оптимизации. Чтобы ему было легче это делать, в управляемой куче поддерживается указатель (обычно называемый указателем на следующий объект или указателем на новый объект), который показывает, где точно будет размещаться следующий объект.

Таким образом, инструкция newobj заставляет CLR-среду выполнить перечисленные ниже ключевые операции.

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

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

Ø И, наконец, перед возвратом ссылки вызывающему коду переместить указатель на следующий объект, чтобы он указывал на следующую доступную позицию в управляемой куче. Весь описанный процесс схематично изображен на рис. 2.

Рис. 2. Детали размещения объектов в управляемой куче

 

 

Из-за постоянного размещения объектов приложением пространство в управляемой куче может со временем заполниться. В случае если при обработке следующей инструкции newobj среда CLR обнаруживает, что в управляемой куче не хватает пространства для размещения запрашиваемого типа, она приступает к сборке мусора и тем самым пытается освободить хоть сколько-то памяти. Поэтому следующее правило, касающееся сборки мусора, тоже звучит довольно просто.

Правило. В случае нехватки в управляемой куче пространства для размещения запрашиваемого объекта начинает выполняться сборка мусора.

Однако то, каким именно образом начнет выполняться сборка мусора, зависит от версии .NET, под управлением которой функционирует приложение.

 

На заметку! Когда объектные ссылки устанавливаются в null, компилятор С# генерирует CIL- код, который заботится о том, чтобы ссылка больше не ссылалась ни на какой объект. Установка ссылки в null не вынуждает сборщик мусора удалить объект из кучи, а просто позволяет явно разорвать связь между ссылкой и объектом, на который она ранее указывала.

 


Дата добавления: 2015-07-25; просмотров: 157 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Базовые сведения о времени жизни объектов| Роль корневых элементов приложения

mybiblioteka.su - 2015-2024 год. (0.012 сек.)