Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Вниз

Экземпляр класса.   Найти похожие ветки 

 
NewZ   (2009-12-27 08:38) [0]

Как хранятся экземпляры класса к оперативной памяти? Что такое VMT, RTTI, RTM? Что такое таблица статических и динамиченских методов?


 
KilkennyCat ©   (2009-12-27 09:22) [1]

ты ожидаешь, что сейчас найдется сумасшедший, который напечатает тут учебник?
На базовые вопросы есть гугль, википедия, книжки.


 
KilkennyCat ©   (2009-12-27 09:24) [2]

http://www.delphimaster.ru/articles/rtti/index.html


 
Юрий Зотов ©   (2009-12-27 11:54) [3]

> NewZ   (27.12.09 08:38)  

> Как хранятся экземпляры класса к оперативной памяти?

Экземпляр класса хранится в динамической памяти, которая выделяется при вызове конструктора через ссылку на класс. Размер выделяемой памяти дает классовый метод InstanceSize, а ее адрес возвращает конструктор.

> Что такое VMT

Virtual method table - таблица виртуальных методов. Располагается по адресу, который равен ссылке на класс и записан в первых 4-х байтах каждого экземпляра этого класса. Содержит реальные адреса методов данного класса - что и позволяет реализовать полиморфизм.

> RTTI

Run-time type information - информация о типе, доступная программе во время ее выполненения. Используется, например, при загрузке published-свойств и событий.

> RTM

Не знаю. Знаю RTL и RTFM, а RTM - не знаю. Подозреваю, что и никто не знает, потому что RTM в природе, насколько мне известно, не встречается.
:o)

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

Что такое таблица статических методов - не знаю. Подозреваю, что и никто не знает, потому что такая таблица в природе, насколько мне известно, тоже не встречается (да и не нужна она, потому что адреса статических методов подставляются в программу напрямую, уже во время ее компиляции).

Таблица динамических методов - таблица, содержащая в себе адреса published-методов класса. Располагается по адресу, который содержится в VMT по смещению vmtDynamicTable (где vmtDynamicTable - это константа, определенная в модуле System). Используется при загрузке событий и тоже реализует полиморфизм.

==============================

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


 
NewZ   (2009-12-27 12:24) [4]


> Юрий Зотов ©   (27.12.09 11:54) [3]

А где в инете наити эти книжки? Ну или хотя бы статьи по этим темам?


PS. Не для экзамена вопросы, а так - интерестно узнать о внутренней структуре.


 
12 ©   (2009-12-27 12:58) [5]

юрий сергеич
а как получить пойнтер на VMT


 
Юрий Зотов ©   (2009-12-27 13:03) [6]

> NewZ   (27.12.09 12:24) [4]

В порядке возрастания сложности и глубины "копания":

1. Стив Тейксейра, Ксавье Пачеко.

У них несколько книг по разным версиям Delphi. Подойдет любая. В сети точно есть. Хорошие книги для начального, но все же более углубленного, нежели обычно, знакомства с Delphi.

2. Рэй Конопка. Создание оригинальных компонент в среде Delphi.

В Сети тоже есть. Отличная книга для еще более глубокого изучения объектной модели Delphi и ее реализации. Не обращайте внимания, что эта книга по Delphi 1 - она не устарела и до сих пор. Есть и более современные книжки по разработке компонентов, но эта - наиболее глубокая.

3. Сергей Орлик. Секреты Delphi на примерах.

В Сети не встречал, но если найдете, то там как раз исследуется внутренняя структура механизмов Delphi (в том числе, механизмов работы самой IDE). Тоже книга по Delphi 1, но тоже не устарела и до сих пор.


 
Юрий Зотов ©   (2009-12-27 13:14) [7]

> 12 ©   (27.12.09 12:58) [5]

Pointer(класс)
или
PPointer(объект)^

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := "$" + IntToHex(Integer(Pointer(TForm1)), 8);
 Caption := Caption + ", $" + IntToHex(Integer(PPointer(Self)^), 8)
end;


 
Юрий Зотов ©   (2009-12-27 13:21) [8]

Еще вариант:
Pointer(ClassType)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
6-1213512244
sashap
2008-06-15 10:44
2010.02.28
Определение переданной информации TWinSocketStream


2-1261836632
Student :)
2009-12-26 17:10
2010.02.28
Чтение параметра реестра


11-1212303624
Сашик
2008-06-01 11:00
2010.02.28
Функция EncodeDate в KOL


8-1203413004
alexey_k
2008-02-19 12:23
2010.02.28
Работа с форматом PNG (или иконками с альфа-каналом)


2-1261726198
oleg1963
2009-12-25 10:29
2010.02.28
Добавить компонент в класс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский