Форум: "Прочее";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];
ВнизЭкземпляр объекта. Найти похожие ветки
← →
Leon-Z © (2011-02-24 22:26) [0]Как экземпляр объекта расположен в памяти ? т.е как бы
выглядело описание класса (объекта) на ассемблере ?
← →
Игорь Шевченко © (2011-02-24 22:35) [1]RTFS: system.pas
← →
Юрий Зотов © (2011-02-24 22:36) [2]Располагается в динамической памяти. Представляет собой набор полей, первое из которых - ссылка на VMT, а остальные - поля класса в порядке их объявления. Первыми идут поля предков, за ними - поля потомков.
← →
Leon-Z © (2011-02-24 22:40) [3]
> Юрий Зотов © (24.02.11 22:36) [2]
> Располагается в динамической памяти. Представляет собой
> набор полей, первое из которых - ссылка на VMT, а остальные
> - поля класса в порядке их объявления. Первыми идут поля
> предков, за ними - поля потомков.
Так, хорошо. А подробнее ??? Где методы ??? (статические в том числе и предков). Где виртуальные методы расположены ?
Динамическая память - только для данных ??? Но тогда где код расположен ???
← →
Игорь Шевченко © (2011-02-24 22:44) [4]
> Но тогда где код расположен ???
в EXEшнике
← →
Leon-Z © (2011-02-24 22:52) [5]
> Игорь Шевченко © (24.02.11 22:44) [4]
> > Но тогда где код расположен ???в EXEшнике
Не в EXE-шнике, а в сегменте кода.
← →
Юрий Зотов © (2011-02-24 22:52) [6]> Leon-Z © (24.02.11 22:40) [3]
> Динамическая память - только для данных?
Да.
> Где методы ??? (статические в том числе и предков).
> Где виртуальные методы расположены ?
> где код расположен ???
Код расположен там, где ему и положено располагаться - в кодовом сегменте статической памяти. Статические методы вызываются напрямую, а виртуальные и динамические - через VMT.
← →
clickmaker © (2011-02-24 22:53) [7]а сегмент кода - в EXEшнике
← →
Игорь Шевченко © (2011-02-24 22:54) [8]
> Не в EXE-шнике, а в сегменте кода.
ну ты умный, зачем тогда спрашиваешь ?
← →
Leon-Z © (2011-02-24 23:02) [9]
> ну ты умный, зачем тогда спрашиваешь ?
А я Вас и не спрашивал. Я прошу проффесионалов помочь мне разобраться с этим вопросом. Кто хочет поприкалываться, прошу идите в чат.
А мне надо реферат написпть по теме "Объекты и память."
← →
KilkennyCat © (2011-02-24 23:06) [10]а у фон неймана все не так.
← →
Referer (2011-02-24 23:07) [11]>> А мне надо реферат написпть по теме "Объекты и память."
А в качестве источника delphimaster укажешь? :о)
P.S. Двоешник ты!
← →
KilkennyCat © (2011-02-24 23:08) [12]
> А мне надо реферат написпть по теме "Объекты и память."
ну так и напиши там: "Не смог написать, потому что Игорь Шевченко прикалывался, но в чат не шел".
← →
Leon-Z © (2011-02-24 23:12) [13]
> Referer (24.02.11 23:07) [11]
> >> А мне надо реферат написпть по теме "Объекты и память.
> "А в качестве источника delphimaster укажешь? :о)P.S. Двоешник
> ты!
А мы так хорошо знакомы, что можем общаться на "ты"?
А в качестве источника я думал кто-нибудь тут посоветует мне литературу по этой теме.
← →
KilkennyCat © (2011-02-24 23:14) [14]
> посоветует мне литературу
ну посмотри на свой вопрос и еще раз подумай, что должны были подумать, о том, что ты имел ввиду.
← →
Leon-Z © (2011-02-24 23:19) [15]
> KilkennyCat © (24.02.11 23:14) [14]
> > посоветует мне литературуну посмотри на свой вопрос и
> еще раз подумай, что должны были подумать, о том, что ты
> имел ввиду.
И что же должны подумать?
← →
Юрий Зотов © (2011-02-24 23:19) [16]> Leon-Z © (24.02.11 23:12) [13]
> литературу по этой теме.
Тут две темы - одна по объектам Delphi, вторая - по памяти.
Первая тема:
Рэй Конопка. Создание оригинальных компонент в среде Delphi.
Вторая тема:
Джеффри Рихтер. Windows для профессионалов.
← →
Игорь Шевченко © (2011-02-24 23:24) [17]
> А мне надо реферат написпть по теме "Объекты и память."
реферат - это продукт самостоятельной работы или я чего-то не понимаю ?
← →
Leon-Z © (2011-02-24 23:29) [18]
> Игорь Шевченко © (24.02.11 23:24) [17]
> > А мне надо реферат написпть по теме "Объекты и память.
> "реферат - это продукт самостоятельной работы или я чего-
> то не понимаю ?<Цитата>
Вы чего-то не понимаете.
В данный момент я не на паре, а значит препода возле меня нет, а значит работа, которую я сейчас делаю - самостоятельная и называется "сбор информации".
← →
KilkennyCat © (2011-02-24 23:30) [19]
> Юрий Зотов © (24.02.11 23:19) [16]
а причем здесь делфи и виндоус? или об этом тож надо было догадываться....
← →
Leon-Z © (2011-02-24 23:39) [20]
> KilkennyCat © (24.02.11 23:30) [19]
> > Юрий Зотов © (24.02.11 23:19) [16]а причем здесь делфи
> и виндоус? или об этом тож надо было догадываться....
На самом деле нужно показать как объет расположен в памяти.
Ну например если бы мы писали на ассемблере, описывали объект, то
как бы мы объявили его поля, статические методы, виртуальные методы ?
Ведь в асме описываются сегменты, и в зависимости от типа сегмента там
размещаются данные или код. А объект в делфи - это композиция данных и кода и она не отражает то, как объект расположен в памяти.
← →
Игорь Шевченко © (2011-02-24 23:51) [21]RTFS: system.pas
Инофрмации там достаточно, вот и собирай ее. Самостоятельно.
← →
Inovet © (2011-02-24 23:51) [22]> [20] Leon-Z © (24.02.11 23:39)
> статические методы, виртуальные методы ?
Тебе же ЮЗ ответил
> [6] Юрий Зотов © (24.02.11 22:52)
> Статические методы вызываются напрямую, а виртуальные и
> динамические - через VMT.
В таблице VMT указатели на методы, т.е. адреса их для косвенного вызова.
← →
Abramov Petr V. (2011-02-24 23:56) [23]
> Ведь в асме описываются сегменты, и в зависимости от типа
> сегмента там
> размещаются данные или код. А объект в делфи - это композиция
> данных и кода и она не отражает то, как объект расположен
> в памяти.
после работы компилятора тоже все раскидывается по сегментам, данные к данным, код к коду.
все методы класса превращаются в обычные функции, но с еще одним параметром - указателем на экземпляр класса, для которого она вызвана.
т.е.
procedure TMyClass.proc1(x: integer);
превращается вproc1(self: pointer; x: integer);
а ее вызовMyClass1.proc1(123)
вproc1(MyClass1, 123)
-- где MyClass1 - указатель на область в
-- сегменте данных, в которой хранятся значения полей экземпляра.
т.е. вся композиция легким движением руки превращается в набор обычных ф-ций, которым передаются обычные указатели на структуры.
← →
Leon-Z © (2011-02-25 00:05) [24]
> Игорь Шевченко © (24.02.11 23:51) [21]
> RTFS: system.pas
> Инофрмации там достаточно, вот и собирай ее. Самостоятельно.
Я смотрел. Там объявлен класс TObject. Но объявлен он как любой другой класс в делфи. И с памятью там работают через какой-то менеджер.
Я просил не это.
Как объект расположен в памяти ? Буквально, вот например:type
TMyClass = class
private
MyVar: Integer;
procedure DoSomething;
end;
...
реализация класса
То же на асме как будет выглядеть?
.data
MyVar dd ?
.code
DoSomething proc
...
endp
end.
Так будет выглядеть объект ?
← →
Leon-Z © (2011-02-25 00:12) [25]
> Abramov Petr V. (24.02.11 23:56) [23]
Спасибо !!!! Вы единственный понимающий суть моего вопроса человек!!! Вот это я и хотел узнать. А где можно подробнее прочесть по это?
Ну например, как на ассемблере описать объект ???
← →
Abramov Petr V. (2011-02-25 00:19) [26]
> Leon-Z © (25.02.11 00:12) [25]
> Спасибо !!!! Вы единственный понимающий суть моего вопроса
> человек!!! Вот это я и хотел узнать.
да нет, просто что же Вы хотели узнать, стало понятно только в [20] в результате обсуждения :)
> Ну например, как на ассемблере описать объект ???
прочесть особо негде (ну или см [16]), а если более менее знаете ассемблер, проще всего писать простенькие кусочки на delphi и смотреть, во что они превращаются на ассемблере.
← →
Игорь Шевченко © (2011-02-25 00:20) [27]
> Как объект расположен в памяти ?
type
TFoo = class
public
destructor Destroy; override;
procedure first_virtual_method; virtual;
procedure second_virtual_method; virtual;
procedure non_virtual;
end;
=>
.code
.... тут еще куча стандартных данных
dd offset TObject.FreeInstance
dd offset TFoo.Destroy
TFoo_vmt dd offset TFoo.first_virtual_method
dd offset TFoo.second_virtual_method
....
TFoo.Destroy proc
...
endp
TFoo.non_virtual proc
..
endp
TFoo.first_virtual_method proc
....
endp
TFoo.second_virtual_method proc
...
endp
end
как-то так
← →
Ляпа (2011-02-25 01:22) [28]http://rapidshare.com/#!download|319dt|174478787|Turbo_Assembler_Tom_Swan_rus.rar|6186
Том Сван. Освоение Turbo Assembler. (1996 г.)
Глава 14. Программирование с объектами.
← →
Германн © (2011-02-25 04:30) [29]
> Leon-Z © (25.02.11 00:12) [25]
>
>
> > Abramov Petr V. (24.02.11 23:56) [23]
>
>
> Спасибо !!!! Вы единственный понимающий суть моего вопроса
> человек!!! Вот это я и хотел узнать. А где можно подробнее
> прочесть по это?
>
> Ну например, как на ассемблере описать объект ???
>
А вас никак не смущает очевидная чушь такого вопроса?
В виду того, что вы должны
На ассемблере никак нельзя"описать объект"!
← →
oxffff © (2011-02-25 08:28) [30]
> clickmaker © (24.02.11 22:53) [7]
> а сегмент кода - в EXEшнике
Так его. Так.
← →
oxffff © (2011-02-25 08:28) [31]
> Leon-Z © (24.02.11 23:02) [9]
>
> > ну ты умный, зачем тогда спрашиваешь ?
>
>
> А я Вас и не спрашивал. Я прошу проффесионалов помочь мне
> разобраться с этим вопросом
Мда.
← →
oxffff © (2011-02-25 08:38) [32]Сейчас в объекте Delphi(новых версиях)в самом конце существует еще одно дополнительное поле - поле синхронизации.
P.S.
Вообще метод не обязательно должен принимать неяный параметр self.
Однако в огромном большинстве случаев это именно так.
Однако существуют языки программирования где методы реализуются для для каждого экземпляра, то есть метод не принимает неявный параметр self, а он в него "прошит".
← →
Плохиш © (2011-02-25 09:29) [33]
> А вас никак не смущает очевидная чушь такого вопроса?
"Его высочество" сантехников это не смущает.
PS. А в качестве источников почему-то никто ещë гугля не посоветовал.
← →
alexdn © (2011-02-25 09:39) [34]
> Abramov Petr V. (24.02.11 23:56) [23]
>
> > Ведь в асме описываются сегменты, и в зависимости от типа
>
> > сегмента там
> > размещаются данные или код. А объект в делфи - это композиция
>
> > данных и кода и она не отражает то, как объект расположен
>
> > в памяти.
>
> после работы компилятора тоже все раскидывается по сегментам,
> данные к данным, код к коду.
> все методы класса превращаются в обычные функции, но с еще
> одним параметром - указателем на экземпляр класса, для которого
> она вызвана.
> т.е. вся композиция легким движением руки превращается в
> набор обычных ф-ций,
Вот и я так думал, что вообщем вся эта работа с классами, обьектами и вообще всё обьектно-ориентированное программирование это извращённое отношение к функциям.
← →
Leon-Z © (2011-02-25 09:54) [35]
> Ляпа (25.02.11 01:22) [28]
> http://rapidshare.com/#!download|319dt|174478787|Turbo_Assembler_Tom_Swan_rus.
> rar|6186 Том Сван. Освоение Turbo Assembler. (1996 г.)Глава
> 14. Программирование с объектами.
Спасибо!!! Скачаю и буду разбираться.
А вообще неясным остался механизм виртуальных методов. Если со статическими понятно - они превращаются в обычные ф-ии и располагаются в сегменте кода, а ссылки на ник "прошиваются в код", то с виртуальными как ?
И как заполняется таблица VMT ? Если у потомка и у предка описан одинаковый виртуальный метод, то адрес какого метода записывается в VMT ? Или оба метода добавляются в таблицу ?
← →
oxffff © (2011-02-25 10:08) [36]
> то с виртуальными как ?
indirect обращения прописываются в код. Аналог вызов импортируемых функций
> И как заполняется таблица VMT ?
Правильно заполняется.
← →
Игорь Шевченко © (2011-02-25 10:16) [37]
> а ссылки на ник "прошиваются в код", то с виртуальными как
> ?
[27] не осилил ?
← →
Anatoly Podgoretsky © (2011-02-25 11:07) [38]> clickmaker (24.02.2011 22:53:07) [7]
А EXEшник на диске.
Вообще то в описание TASM есть информация по объектным расширениям Паскаля
← →
Anatoly Podgoretsky © (2011-02-25 11:08) [39]> Leon-Z (24.02.2011 23:02:09) [9]
А почему тогда такой странный путь выбран, изучения по помойке?
← →
Anatoly Podgoretsky © (2011-02-25 11:09) [40]> KilkennyCat (24.02.2011 23:08:12) [12]
И тут к нему еще и АП присоединился :-)
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.005 c