|
|
Сервер
поддерживается
кафедрой информатики и
вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail : kadan@grsu.grodno.by
|
Виртуальные и динамические методы
Теперь рассмотрим
подробнее виртуальные и
динамические методы. Общим для них
является то, что при их вызове адрес
определяется не во время
компиляции, а во время выполнения
путем поиска в специальных
таблицах.
Такой поиск
еще называется поздним
связыванием. Разница между
методами заключается в особенности
поиска адреса.
Когда
компилятор встречает обращение к
виртуальному методу, он
подставляет вместо обращения к
конкретному адресу код, который
обращается к специальной таблице и
извлекает оттуда нужный адрес. Эта
таблица называется таблицей виртуальных
методов (Virtual Method
Table, VMT).
Такая таблица есть для каждого
объектного типа. В ней хранятся
адреса всех виртуальных
методов класса, независимо от того,
унаследованы ли они от предка или
перекрыты. Отсюда и достоинства, и
недостатки виртуальных методов:
они вызываются сравнительно быстро
(но медленнее статических), однако
для хранения указателей на них
требуется большое количество
памяти.
Динамические
методы вызываются медленнее, но
позволяют более экономно
расходовать память. Каждому
динамическому методу системой
присваивается уникальный индекс. В таблице
динамических методов (Dynamic Method
Table, DMT) класса хранятся
индексы и адреса только тех динамических
методов, которые описаны в данном
классе. При вызове динамического
метода происходит поиск в этой
таблице; в случае неудачи
просматриваются все классы-предки
в порядке иерархии и, наконец, TObject, где
имеется стандартный обработчик
вызова динамических методов.
Экономия памяти налицо. Те, для кого
это не очевидно, найдут подробности
в разделе "Информация о типе
времени выполнения (RTTI). Указатели на
класс"
Для
комментария : kadan@grsu.grodno.by
|
|