русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Виклик динамічних методів


Дата додавання: 2014-04-22; переглядів: 921.


Обробка виклику динамічного методу складніша і вимагає більше часу, ніж виклик віртуального методу. Замість використання інструкції Call для виклику через вказівник методу по статичному зміщенню в таблиці віртуальних методів, таблиця динамічних методів об’єктного типу і таблиця динамічних методів його предка повинні переглядатися в пошуку «найбільш верхнього» входження індексу конкретного динамічного методу, а виклик потім повинен виконуватися через відповідний вказівник методу. Цей процес вимагає використання значно більшого числа інструкцій, які можна записати як вбудовані (INLINE), тому Pascal містить підпрограму обробки викликів, що використовується при виклику динамічного методу.

Спершу обробник вибирає зміщення таблиці динамічних методів з таблиці віртуальних методів. Потім використовується кешований індекс – поле таблиці динамічних методів. Обробник перевіряє, чи є індекс викликаного динамічного методу індексом того динамічного методу, який викликався останнім. Якщо це так, то він негайно передає управління цьому методу, використовуючи непрямий перехід за допомогою вказівника методу, записаного по зміщенню, заданому полем «кешоване зміщення». Якщо динамічний індекс викликаного методу не співпадає з тим, який записаний у кеші, то обробник переглядає власну і батьківські таблиці динамічних методів, використовуючи поле DMT зі зміщенням батьківської DMT, поки не знайде запис з даним індексом динамічного методу. Індекс і зміщення відповідного вказівника методу записуються потім в кешовані поля таблиці динамічних методів, а управління передається методу. Якщо з якихось причин обробник не може знайти запис з даним індексом динамічного методу, він завершує прикладну програму з кодом помилки виконання 210.

Попри використання кешування і добре оптимізованої підпрограми обробки викликів, обробка виклику динамічного методу може вимагати значно більше часу, ніж виклик віртуального методу. Однак у тих випадках, коли самі дії, що виконуються динамічним методом, вимагають багато часу, додатковий простір, що зберігається таблицями динамічних методів може виявитися істотнішим.

 


<== попередня лекція | наступна лекція ==>
Виклик статичних методів | Виклик конструкторів та деструкторів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн