Форум: "Начинающим";
Текущий архив: 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