Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Desktop_1 / 2010_150 Акчурин - Программирование на языке C#.doc
Скачиваний:
171
Добавлен:
10.06.2015
Размер:
4.82 Mб
Скачать
    1. Автоматическое управление памятью

Одной из основных особенностей платформы .Net, делающих ее привлекательной для разработки приложений, является механизм автоматического управления памятью, известный как сборка мусора (garbage collection).

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

Принцип работы сборщика мусора в спецификации не определен, поэтому разработчики реализаций CLI могут использовать любые алгоритмы, корректно выполняющие очистку управляемой кучи.

В .Net реализован так называемый сборщик мусора с поколениями (generational garbage collector), работающий на основе построения графа достижимости объектов.

Выделение памяти в управляемой куче. Под управляемую кучу резервируется непрерывная область адресного пространства процесса. Система выполнения поддерживает специальный указатель (назовем его HeapPtr), содержащий адрес, по которому будет выделена память для следующего объекта. Когда куча не содержит ни одного объекта, HeapPtr указывает на начало кучи. Выделение памяти для объекта заключается в увеличении HeapPtr на количество байт, занимаемое этим объектом в куче.

    1. Лексемы в cil

Набор лексем, которые может распознавать компилятор CIL, по семантическому признаку делится на три отдельных категории:

  • директивы CIL;

  • атрибуты CIL;

  • коды операций CIL.

Лексемы CIL каждой из этих категорий представляются с помощью определенного синтаксиса и затем объединяются для получения полноценной .NET-сборки.

      1. Директивы cil

В CIL имеется ряд лексем, которые применяются для описания общей структуры .NET-сборки. Эти лексемы называются директивами.

Директивы в CIL позволяют информировать компилятор CIL о том, как ему следует определять пространства имен, типы и члены, которые будут входить в состав сборки. Синтаксически директивы представляются с использованием префикса в виде точки, например

.namespace

.class

.assembly.

Следовательно, при наличии в файле с расширением *.il (принятое расширение для файлов, содержащих CIL-код) одной директивы .namespace и трех директив .class, компилятор CIL будет генерировать сборку с единственным пространством имен и тремя соответствующими типами классов .NET.

Помимо директив .assembly и .module, существуют и другие CIL-директивы, которые позволяют еще больше уточнять общую структуру создаваемого двоичного файла .NET:

Директива

Описание

.maxstack

Определяет размер виртуального стека, По умолчанию 8.

.namespace

Определяет пространства имен.

.class

Определяет класс.

.module

Определяет модуль.

assembly.

Определяет сборку, включаемую в модуль.

.mresources

Если в сборке будут использоваться внутренние ресурсы (такие как растровые изображения или таблицы строк), с помощью этой директивы можно указывать имя файла, в котором содержатся включаемые в сборку ресурсы.

.subsystem

С помощью этой CIL-директивы можно указывать предпочитаемый пользовательский интерфейс, внутри которого должна выполняться сборка. Например, значение 2 означает, что сборка должна работать в рамках графического интерфейса Windows Forms, а путем значение 3 — что она должна работать как консольное приложение.

Соседние файлы в папке Desktop_1