Добавление и извлечение данных: стековая природа CIL

Добавление и извлечение данных: стековая природа CIL

Высокоуровневые языки .NET (например, такие как C#) пытаются максимально скрыть низкоуровневые сложности. Одним из аспектов разработки .NET, который оказывается скрытым особенно хорошо, является тот факт, что CIL является языком, целиком основанным на стековом программировании. Напомним, что при исследований пространства имен System.Collections (см. главу 7) мы с вами выяснили, что тип stack может использоваться для добавления значения в стек, а также для удаления из стека значения, размещенного на вершине стека. Конечно, разработчики CIL-приложений для загрузки и выгрузки значений не используют непосредственно объект System.Сollections.Stack, однако они применяют аналогичные операции.

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

В CIL просто невозможно получить доступ к элементам данных непосредственно, и это касается как локально определенных переменных, так и входных аргументов методов, а также полей данных типов. Нужно сначала явно загрузить элемент в стек, чтобы затем "вытолкнуть" его оттуда для дальнейшего использования (помните об этом, ведь именно поэтому блок программного кода CIL может казаться несколько избыточным).

Чтобы понять, как CIL использует стековую модель, рассмотрим простой C#-метод PrintMessage(), который не имеет аргументов и ничего не возвращает. В рамках реализации этого метода вы просто выводите значение локальной строковой переменной в поток стандартного вывода.

public void PrintMessage() {

 string myMessage = "Привет.";

 Consolе.WriteLine(myMessage);

}

Если рассмотреть результат трансляции этого метода компилятором C# в термины CIL, вы сразу заметите, что метод PrintMessage() определяет ячейку хранения для локальной переменной, используя директиву.locals. Локальная строка затем загружается и сохраняется в этой локальной неременной с помощью кодов операций ldstr (загрузка строки) и stloc.0 (это можно прочитать, как "запомнить текущее значение в локальной переменной с индексом 0").

Значение (снова с индексом 0) затем загружается в память с помощью кода операции ldloc.0 ("загрузить локальный аргумент с индексом 0") для использования в вызове метода System.Console.WriteLine() (указанном с помощью кода операции call). Наконец, происходит возврат из функции через код операции ret.

.method public hidebysig instance void PrintMessage() cil managed {

 .maxstack 1

 // Определение локальной строковой переменной (с индексом 0).

 .locals init ([0] string myMessage)

 // Загрузка строки со значением "Привет."

 ldstr "Привет."

 // Сохранение строкового значения в стеке в локальной переменной.

 stloc.0

 // Загрузка значения с индексом 0.

 ldloc.0

 // Вызов метода с текущим значением.

 call void [mscorlib]System.Console::WriteLine(string)

 ret

}

Замечание. В программном коде CIL поддерживаются комментарии, использующие синтаксис двойной косой черты (а также синтаксис /*…*/). Как и в C#, компилятором CIL комментарии просто игнорируются.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Извлечение данных из объектов рисунка с помощью специального мастера

Из книги AutoCAD 2009 автора Орлов Андрей Александрович

Извлечение данных из объектов рисунка с помощью специального мастера Рассмотрим порядок работы с мастером извлечения данных.1. Запустите команду вставки таблицы в рисунок (допустим, что рисунок содержит некоторые объекты, атрибуты которых вы хотели бы внести в эту


Добавление пользовательских данных состояния представлений

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Добавление пользовательских данных состояния представлений В дополнение к свойству EinableViewState базовый класс System.Web. UI.Control предлагает наследуемое свойство ViewState. Это свойство в фоновом режиме обеспечивает доступ к типу System.Web.UI.StateBag, представляющему все данные поля __VIEWSTATE.


Добавление к классу нового элемента данных

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Добавление к классу нового элемента данных Процедура добавления в класс новых данных сходна с только что описанной процедурой добавления метода. Для этого выберите из меню строку Add Variable. На экране появится диалоговая панель Add Member Variable, представленная на рисунке 2.16. Рис.


Извлечение данных из объектов с помощью специального мастера

Из книги AutoCAD 2010 автора Орлов Андрей Александрович

Извлечение данных из объектов с помощью специального мастера Рассмотрим порядок работы с мастером извлечения данных.1. Запустите команду вставки таблицы (допустим, что документ содержит некоторые объекты, атрибуты которых вы хотели бы внести в эту таблицу (рис. 4.54)).


4.4. Извлечение данных из пакетов

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

4.4. Извлечение данных из пакетов В соревнованиях по многоборью спортсмены сначала преодолевают один из участков вплавь, далее пересаживаются на велосипед и т.д. Протокол IP работает подобным же образом: датаграмма перемещается из одной среды передачи в другую (из одного


Инкапсуляция и извлечение данных

Из книги Сетевые средства Linux автора Смит Родерик В.

Инкапсуляция и извлечение данных Стек протоколов хорошо иллюстрирует перемещение данных между программными компонентами, поддерживающими сетевое взаимодействие, однако он не дает ответа на вопрос, какие же изменения претерпевает информация на этом пути. На различных


Добавление форм ввода данных

Из книги Веб-Самоделкин. Как самому создать сайт быстро и профессионально автора Гладкий Алексей Анатольевич

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


5.2.3. Добавление элемента к списку, если он в нем отсутствует (добавление без дублирования)

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

5.2.3. Добавление элемента к списку, если он в нем отсутствует (добавление без дублирования) Часто требуется добавлять элемент X в список L только в том случае, когда в списке еще нет такого элемента. Если же X уже есть в L, тогда L необходимо оставить без изменения, поскольку


Добавление данных из файла-копии в адресную книгу

Из книги Самоучитель Skype. Бесплатная связь через Интернет автора Яковлева Е. С.

Добавление данных из файла-копии в адресную книгу С созданным файлом-копией списка контактов можно работать и редактировать в нем данные.Контактные данные могут быть добавлены в адресную книгу следующим образом:1. Дважды щелкните на пиктограмме файла-копии списка


2.5. Извлечение данных из таблиц

Из книги MySQL 5.0. Библиотека программиста автора Гольцман Виктор Иосифович

2.5. Извлечение данных из таблиц Для получения информации из таблиц базы данных используются запросы – SQL-команды, начинающиеся с ключевого слова SELECT. В этом разделе вы познакомитесь со структурой запросов.Простые запросыЗнакомство с запросами начнем с наиболее простой


Создание запросов на добавление данных

Из книги Microsoft Access 2007 автора Днепров Александр Г.

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


Добавление данных с использованием подзапроса с соединениями

Из книги Восстановление данных на 100% автора Ташков Петр Андреевич

Добавление данных с использованием подзапроса с соединениями В главе 20 мы рассматривали встроенный метод выборки для передачи данных в оператор INSERT, например,INSERT INTO ATABLE (COLUMN2, COLUMN3, COLUMN4)SELECT BCOLUMN, CCOLUMN, DCOLUMNFROM BTABLE WHEREЭтот метод не ограничен однопоточным запросом. Ваш входной


Извлечение данных из RAID-0

Из книги Справка по SQL автора

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


Извлечение данных. Оператор SELECT

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

Извлечение данных. Оператор SELECT Оператор SELECT Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Практически любой пользователь баз данных в состоянии написать простейший оператор SELECT типаSELECT * FROM


Стековая компоновка

Из книги автора

Стековая компоновка Класс QStackedLayout (менеджер стековой компоновки) управляет компоновкой набора дочерних виджетов или «страниц», показывая в каждый конкретный момент только одну из них и скрывая от пользователя остальные. Сам менеджер QStackedLayout невидим и не содержит