Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.12;
Скачать: CL | DM;

Вниз

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

 
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. А в качестве источников почему-то никто ещ&#235; гугля не посоветовал.


 
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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.008 c
2-1299086314
fynjy93
2011-03-02 20:18
2011.06.12
dbnavigator


15-1298628283
Очень злой
2011-02-25 13:04
2011.06.12
вложенные With


15-1298365116
Гость
2011-02-22 11:58
2011.06.12
С Днем защитника Отечества всех!


2-1299173751
Leon-Z
2011-03-03 20:35
2011.06.12
Поиск 2 одинаковых элементов в массиве.


15-1298266795
Лун
2011-02-21 08:39
2011.06.12
Облегчить беспорядок