Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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. А в качестве источников почему-то никто ещ&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.005 c
15-1298410194
Юрий
2011-02-23 00:29
2011.06.12
С днем рождения ! 23 февраля 2011 среда


2-1299263954
Филька
2011-03-04 21:39
2011.06.12
Windows 7 и плавное перемещение прогрессбара


2-1295769353
Holod
2011-01-23 10:55
2011.06.12
DBLookupComboBox и фильтрация


2-1299073367
pest
2011-03-02 16:42
2011.06.12
MySQL + Proxy + Delphi (работа с MySQL серевером через прокси)


2-1299248506
я_только_учусь
2011-03-04 17:21
2011.06.12
Возможно ли выполнить SQL запрос для двух различных DataSource?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский