- •Введение
- •Основные сведения по языку c#
- •Общие сведения о .Net Framework
- •C# и платформа .Net Framework
- •Средства разработки для .Net Framework
- •СредаClr
- •Понятие сборки (assembly)
- •Jit-компиляция
- •Просмотр метаданных
- •Сборка мусора
- •Обзор иср
- •Иср Visual c# Express
- •Стартовая страница
- •Консольное приложение
- •Приложения Windows
- •ИсрVisual Studio .Net
- •ИсрSharpDevelop
- •Основы языка c#
- •Алфавит
- •Комментарии
- •Идентификаторы
- •Ключевые слова
- •Переменные и константы
- •Структура программы на c#
- •Пространства имен
- •Main() и аргументы командной строки
- •Операторы
- •Основные операторы
- •Унарные операторы
- •Аддитивные операторы
- •Мультипликативные операторы
- •Операторы сдвига
- •Операторы отношений
- •Операторы присваивания
- •Арифметическое переполнение
- •Математические операции
- •Литералы
- •Описание
- •Структуры
- •Инкапсуляция
- •Наследование
- •Полиморфиэм
- •Конструкторы
- •Деструкторы
- •Интерфейсы
- •Делегаты
- •Типы значений
- •Ссылочные типы
- •Тип dynamic
- •Тип object
- •Тип string
- •Встроенные базовые типы
- •Типы чисел
- •Типы целых чисел
- •Типы чисел с плавающей запятой
- •Значения типов по умолчанию
- •Преобразования типов
- •Стандартное форматирование чисел
- •Нестандартное форматирование чисел
- •Тип char - символы
- •Тип enum - перечисление
- •Тип DateTime
- •Свойства
- •Задание типов в объявлениях переменных
- •Инструкции, введение
- •Выражения
- •Разделители
- •Решения и ветвления
- •Безусловный переход вызовом функций
- •Ветвление if; else
- •Вложенные ветвления if; else
- •Выбор switch; case
- •Команда goto и метки
- •Цикл for
- •Цикл while
- •Цикл do- while
- •Безусловные переходы
- •Вечные циклы
- •Команда foreach
- •Обработкаошибок и исключений
- •Try, Catch
- •Try, Catch, Finally
- •Работа со строками
- •Представление строк
- •Метод ToString()
- •Доступ к отдельным знакам
- •Массивы и коллекции
- •Коллекции
- •Массивы
- •Использование инструкции foreach, in
- •Графика
- •Объект Graphics
- •Перо (Pen)
- •Кисть (Brush)
- •Шрифты и текст
- •Методы рисования
- •Методы заливки
- •Рисование графика функции
- •Растровая графика
- •Примитивные компоненты
- •Подробнее оCil
- •Ассемблер cil
- •Архитектура виртуальной машиныCil
- •Память для метода
- •Система типовCts
- •Типы в базовых классах .Net, c# и cil
- •Пользовательские типы данных
- •Упакованные типы-значения
- •Виртуальная система выполнения
- •Стек вычислений
- •Автоматическое управление памятью
- •Лексемы в cil
- •Директивы cil
- •Атрибуты cil
- •Коды операций в cil
- •Команды загрузки
- •Команды выгрузки
- •Вычислительные команды
- •Арифметические инструкции
- •Переходы и вызовы в il
- •Трансляция вCil
Автоматическое управление памятью
Одной из основных особенностей платформы .Net, делающих ее привлекательной для разработки приложений, является механизм автоматического управления памятью, известный как сборка мусора (garbage collection).
Спецификация CLI утверждает, что память для объектов, используемых в программе, выделяется в управляемой куче (managed heap), которая периодически очищается от ненужных объектов сборщиком мусора.
Принцип работы сборщика мусора в спецификации не определен, поэтому разработчики реализаций CLI могут использовать любые алгоритмы, корректно выполняющие очистку управляемой кучи.
В .Net реализован так называемый сборщик мусора с поколениями (generational garbage collector), работающий на основе построения графа достижимости объектов.
Выделение памяти в управляемой куче. Под управляемую кучу резервируется непрерывная область адресного пространства процесса. Система выполнения поддерживает специальный указатель (назовем его HeapPtr), содержащий адрес, по которому будет выделена память для следующего объекта. Когда куча не содержит ни одного объекта, HeapPtr указывает на начало кучи. Выделение памяти для объекта заключается в увеличении HeapPtr на количество байт, занимаемое этим объектом в куче.
Лексемы в cil
Набор лексем, которые может распознавать компилятор CIL, по семантическому признаку делится на три отдельных категории:
директивы CIL;
атрибуты CIL;
коды операций CIL.
Лексемы CIL каждой из этих категорий представляются с помощью определенного синтаксиса и затем объединяются для получения полноценной .NET-сборки.
Директивы 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 — что она должна работать как консольное приложение. |