Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 16 стр.

UptoLike

1. временные значения хранятся не в куче, а непосредственно в
локальных переменных метода;
2. в массивах типов-значений содержатся не ссылки на значения,
а непосредственно сами значения.
Поэтому в общую систему типов были добавлены так называемые
пользовательские типы-значения. Эти типы могут быть объявлены про-
граммистом, но, как и встроенные типы-значения, размещаются не в ку-
че, а в ячейках.
Пользовательские типы-значения делятся на структуры и перечисле-
ния.
Структуры являются аналогом классов. Они, как и классы, могут со-
держать поля, методы, свойства и события. Все структуры неявно наследу-
ют от библиотечного класса System.ValueType, и, более того, встроенные
типы-значения также наследуют от этого класса. Тут сразу следует заме-
тить, что система типов не предусматривает никакого наследования стру-
ктур, кроме данного неявного. Другими словами, структуры не могут на-
следоваться друг от друга и, тем более, не могут наследоваться от классов
(кроме System.ValueType).
Перечисления представляют собой структуры с одним целочислен-
ным полем Value. Кроме того, перечисления содержат набор констант, оп-
ределяющих возможные значения поля Value. При этом для каждой кон-
станты в перечислении хранится ее имя. Перечисления неявно наследуют
от библиотечного класса System.Enum, который, в свою очередь, является
наследником все того же класса System.ValueType.
1.2.2.2. Указатели
Использование указателей может значительно увеличить производи-
тельность, и в некоторых языках программирования указатели применя-
ются исключительно часто (например, в C). Однако считается, что приме-
нение указателей чревато появлением в программах большого количества
трудноуловимых неперехватываемых ошибок. Поэтому, например, систе-
ма типов уже упоминавшейся платформы Java обходится без указателей.
Тем не менее, разработчикам .NET удалось добавить указатели в об-
щую систему типов. При этом появилось две категории указателей: упра-
вляемые указатели (managed pointers) и неуправляемые указатели (unman-
aged pointers).
Для того чтобы программы оставались безопасными, на использова-
ние управляемых указателей наложен целый ряд ограничений:
1. Управляемые указатели могут содержать только адреса ячеек, то
есть они могут указывать исключительно только на глобальные
и локальные переменные, параметры методов, поля объектов и
ячейки массивов. Для полноты картины следует заметить, что
Введение в архитектуру Microsoft .NET Framework
19
числения) и указатели. Схема общей системы типов, на которой отражены
эти дополнительные элементы, приведена на рис. 1.8.
Рис. 1.8. Общая система типов
1.2.2.1. Структуры и перечисления
Как показал опыт платформы Java, которая была разработана задол-
го до платформы .NET, одной из основных причин ухудшения производи-
тельности Java-программ является медленная работа сборщика мусора,
вызванная большим количеством мелких объектов в куче. Это явление
можно наблюдать в двух случаях:
1. Интенсивное создание временных объектов с очень малым вре-
менем жизни. Зачастую такие объекты создаются и используют-
ся в теле одного метода.
2. Использование гигантских массивов объектов, при котором
возникает ситуация, изображенная на рис. 1.6, а именно: в мас-
сиве хранятся ссылки на огромное количество небольших объе-
ктов.
Разработчиками .NET был подмечен тот факт, что использование ти-
пов-значений вместо объектов позволяет избежать описанных выше про-
блем, потому что:
18
CIL и системное программирование в Microsoft .NET
Типы
Ссылочные
типы
Самоописы-
вающие типы
Встроенные
ссылочные типы
Классы
Массивы
Упакованные
типы-значения
Управляемые
указатели
Указатели
Интерфейсы
Неправляемые
указатели
Типы-значения
Встроенные
типы-значения
Целые типы
Типы с плаваю-
щей запятой
Структуры
Перечисления
18                            CIL и системное программирование в Microsoft .NET   Введение в архитектуру Microsoft .NET Framework                       19


числения) и указатели. Схема общей системы типов, на которой отражены                      1. временные значения хранятся не в куче, а непосредственно в
эти дополнительные элементы, приведена на рис. 1.8.                                           локальных переменных метода;
                                                                                           2. в массивах типов-значений содержатся не ссылки на значения,
                                                                                              а непосредственно сами значения.
                       Типы                                                             Поэтому в общую систему типов были добавлены так называемые
                                                                                  пользовательские типы-значения. Эти типы могут быть объявлены про-
                              Ссылочные                                           граммистом, но, как и встроенные типы-значения, размещаются не в ку-
     Типы-значения                                                                че, а в ячейках.
                                 типы
                                                                                        Пользовательские типы-значения делятся на структуры и перечисле-
         Встроенные             Самоописы-                                        ния.
                                                           Интерфейсы                   Структуры являются аналогом классов. Они, как и классы, могут со-
       типы-значения           вающие типы
                                                                                  держать поля, методы, свойства и события. Все структуры неявно наследу-
                                    Встроенные                                    ют от библиотечного класса System.ValueType, и, более того, встроенные
            Целые типы                                       Указатели
                                  ссылочные типы                                  типы-значения также наследуют от этого класса. Тут сразу следует заме-
                                                                                  тить, что система типов не предусматривает никакого наследования стру-
          Типы с плаваю-                                      Управляемые         ктур, кроме данного неявного. Другими словами, структуры не могут на-
                                       Классы
           щей запятой                                         указатели          следоваться друг от друга и, тем более, не могут наследоваться от классов
                                                                                  (кроме System.ValueType).
                                                              Неправляемые              Перечисления представляют собой структуры с одним целочислен-
         Структуры                     Массивы
                                                                указатели         ным полем Value. Кроме того, перечисления содержат набор констант, оп-
                                                                                  ределяющих возможные значения поля Value. При этом для каждой кон-
                                   Упакованные
        Перечисления                                                              станты в перечислении хранится ее имя. Перечисления неявно наследуют
                                  типы-значения
                                                                                  от библиотечного класса System.Enum, который, в свою очередь, является
                                                                                  наследником все того же класса System.ValueType.
       Рис. 1.8. Общая система типов
                                                                                  1.2.2.2. Указатели
1.2.2.1. Структуры и перечисления                                                      Использование указателей может значительно увеличить производи-
     Как показал опыт платформы Java, которая была разработана задол-             тельность, и в некоторых языках программирования указатели применя-
го до платформы .NET, одной из основных причин ухудшения производи-               ются исключительно часто (например, в C). Однако считается, что приме-
тельности Java-программ является медленная работа сборщика мусора,                нение указателей чревато появлением в программах большого количества
вызванная большим количеством мелких объектов в куче. Это явление                 трудноуловимых неперехватываемых ошибок. Поэтому, например, систе-
можно наблюдать в двух случаях:                                                   ма типов уже упоминавшейся платформы Java обходится без указателей.
         1. Интенсивное создание временных объектов с очень малым вре-                 Тем не менее, разработчикам .NET удалось добавить указатели в об-
            менем жизни. Зачастую такие объекты создаются и используют-           щую систему типов. При этом появилось две категории указателей: упра-
            ся в теле одного метода.                                              вляемые указатели (managed pointers) и неуправляемые указатели (unman-
         2. Использование гигантских массивов объектов, при котором               aged pointers).
            возникает ситуация, изображенная на рис. 1.6, а именно: в мас-             Для того чтобы программы оставались безопасными, на использова-
            сиве хранятся ссылки на огромное количество небольших объе-           ние управляемых указателей наложен целый ряд ограничений:
            ктов.                                                                          1. Управляемые указатели могут содержать только адреса ячеек, то
     Разработчиками .NET был подмечен тот факт, что использование ти-                         есть они могут указывать исключительно только на глобальные
пов-значений вместо объектов позволяет избежать описанных выше про-                           и локальные переменные, параметры методов, поля объектов и
блем, потому что:                                                                             ячейки массивов. Для полноты картины следует заметить, что