IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Размещение объекта в памяти
сообщение
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Объект TObject занимает в памяти 8 байт - сума двух longint, т.е. места для методов не резервируется. Мне интересно, как и где в памяти размещаются методы объектов и куда я обращаюсь, вызывая метод по ссылке - po^.method?

type
PTobject=^TObject;
TObject=object
i,i2:longint;
procedure method;
end;
procedure TObject.method;
begin
i:=4;
end;
var mem:longint;
po:PTobject;
p:pointer;
pi:^longint;
begin
mem:=memavail;
new(po);
po^.method;{!!!!!!!!!!!!!!!!!!сдесь}
p:=po;
pi:=p;
writeln(pi^);
writeln('Difference: ',mem-memavail);
readln;
end.



--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Нигде не встречал информации о том, где хранится виртуальный метод, где? В куче?
Виртуальный метод с точки зрения компилятора что, отличается от статического? Он как-то по-другому написан? Для него другой синтаксис? Зачем его хранить ИНАЧЕ чем статический? Он также хранится в сегменте кода, только вот адрес точки входа в него заносится в VMT...

Цитата
Тот же вопрос для VMT?
То же самое... Не нужно ничего лишнего хранить в "куче", поэтому сама VMT хранится в сегменте данных, а экземпляр объекта содержит 16-битный указатель на нее (фактически - смещение в DS). Подробнее - здесь:
Глава 17. Внутренний формат объектов
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 22:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name