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

Основные черты архитектуры виртуальной машины CIL таковы:

  • Машина является объектно-ориентированной: структура CIL отражает разбиение кода на классы, методы и т.п.

  • Машина является стековой. Стек используется только для хранения промежуточных результатов вычисления.

  • Ячейки стека представлены как 4-байтовые или 8-байтовые знаковые целые (обозначаемые как I4 и I8);

  • Большинство команд CIL получают свои аргументы на стеке, удаляют их со стека и помещают вместо них результаты вычисления.

      1. Память для метода

При возбуждении метода память выделяется для:

  • Таблиц аргументов метода.

  • Локальных переменных метода.

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

  • Полей, к которым метод может иметь доступ. Они размещены в динамической памяти - «куче».

Все поля описываются начальным адресом и типами данных, которые в них размещаются.

Стек вычисленийсостоит изслотов, которые в разные моменты времени может содержать данные разных типов. Максимальное число слотов фиксировано (по умолчанию 8).

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

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

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

      1. Система типовCts

В библиотеке классов использована общая система типов CTS(Common Types System), которая определяет доступные типы для использования во время выполнения. На следующей схеме показана связь различных типов.

Все типы делятся на две категориис

  • Типы-значения (value types). Представляют собой примитивные типы данных (целые числа и числа с плавающей запятой). Использование типов-значений всегда связано с копированием их значений.

  • Ссылочные типы (reference types). Описывают объектные ссылки (object references), которые представляют собой адреса объектов. Работа со ссылочными типами всегда осуществляется через адреса их значений.

Значения любого типа хранятся в ячейках (location). В качестве ячеек могут выступать локальные и глобальные переменные, параметры методов, поля объектов и элементы массивов. Для каждой ячейки известен тип значений, которые она может содержать.

Особо важным является то обстоятельство, что ячейки не могут содержать объекты. Все объекты размещаются в специальной области памяти, называемой кучей (heap). Таким образом, в ячейках могут храниться только значения типов-значений или объектные ссылки.

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