TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Таблица динамических методов 

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

             Динамические методы обеспечивают в таких ситуациях альтерна-
        тиву.  В Borland Pascal имеется формат таблицы  методов  и  новый
        способ диспетчеризации методов с поздним связыванием.  Вместо ко-
        дирования для всех методов объектного типа с поздним связыванием,
        в таблице динамических методов кодируются только те методы, кото-
        рые были в объектном типе переопределены.  Если в наследующих ти-
        пах переопределяются только некоторые из большого числа методов с
        поздним связыванием,  формат таблицы динамических методов исполь-
        зует  меньшее пространство,  чем формат таблицы виртуальных мето-
        дов.
             Формат таблицы динамических методов  иллюстрируют  следующие
        два объектных типа:

             type
                TBase = object
                   X: Integer;
                   constructor Init;
                   destructor Done; virtual;
                   procedure P10; virtual 10;
                   procedure P20; virtual 20;
                   procedure P30; virtual 30;
                   procedure P30; virtual 30;
                end;

             type
                TDerived = object(TBase)
                   Y: Integer;
                   constructor Init;
                   destructor Done; virtual;
                   procedure P10; virtual 10;
                   procedure P30; virtual 30;
                   procedure P50; virtual 50;
                end;

             На Рис. 21.10 и 21.11 показаны схемы таблицы виртуальных ме-
        тодов и таблицы динамических методов для TBase и TDerived. Каждая
        ячейка соответствует слову памяти, а каждая большая ячейка - двум
        словам памяти.

                   ТВМ TBase                    ТДМ TBase
                   ┌──────────────────┐         ┌──────────────────┐
                   │ 4                │         │ 0                │
                   ├──────────────────┤         ├──────────────────┤
                   │ -4               │         │ индекс в кэш     │
                   ├──────────────────┤         ├──────────────────┤
                   │ Смещ. ТДМ TBase  │         │ смещение записи  │
                   ├──────────────────┤         ├──────────────────┤
                   │ 0                │         │ 4                │
                   ├──────────────────┤         ├──────────────────┤
                   │                  │         │ 10               │
                   │ @TBase.Done      │         ├──────────────────┤
                   │                  │         │ 20               │
                   └──────────────────┘         ├──────────────────┤
                                                │ 30               │
                                                ├──────────────────┤
                                                │ 40               │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TBase.P10       │
                                                │                  │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TBase.P20       │
                                                │                  │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TBase.P30       │
                                                │                  │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TBase.P40       │
                                                │                  │
                                                └──────────────────┘

             Рис. 21.10 Схемы таблицы виртуальных методов и таблицы дина-
        мических методов для TBase.
           Объектный тип  имеет  таблицу  динамических методов только в
        том случае, если в нем вводятся или переопределяются динамические
        методы.  Если объектный тип наследует динамические методы, но они
        не переопределяются,  и новые динамические методы не вводятся, то
        он просто наследует таблицу динамических методов своего предка.

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

                   ТВМ TDerived                         ТДМ TDerived
                   ┌───────────────────┐        ┌──────────────────┐
                   │ 6                 │        │ Смещ. ТДМ TBase  │
                   ├───────────────────┤        ├──────────────────┤
                   │ -6                │        │ индекс в кеше    │
                   ├───────────────────┤        ├──────────────────┤
                   │ Смещ. ТДМ TDerived│        │ смещение записи  │
                   ├───────────────────┤        ├──────────────────┤
                   │ 0                 │        │ 3                │
                   ├───────────────────┤        ├──────────────────┤
                   │                   │        │ 10               │
                   │ @TBase.Done       │        ├──────────────────┤
                   │                   │        │ 30               │
                   └───────────────────┘        ├──────────────────┤
                                                │ 50               │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TDerived.P10    │
                                                │                  │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TDerived.P30    │
                                                │                  │
                                                ├──────────────────┤
                                                │                  │
                                                │ @TDerived.T50    │
                                                │                  │
                                                └──────────────────┘

             Рис. 21.11.  Схемы таблицы виртуальных методов и таблицы ди-
        намических методов для TDerived.

             Первое слово  таблицы динамических методов содержит смещение
        сегмента данных родительской таблицы динамических методов, или 0,
        если родительская таблица динамических методов отсутствует.

             Второе и третье слово таблицы динамических методов использу-
        ется в кеш-буфере просмотра динамических методов (см. далее).

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

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz