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

Вниз

SizeOf(ClassType)   Найти похожие ветки 

 
VD601   (2003-06-22 23:14) [0]

TMyClass = class ... end; SizeOf(TMyClass) дает, естественно, 4. А как получить реальный размер типа?


 
jack128   (2003-06-22 23:17) [1]

TObject.InstanceSize


 
circul   (2003-06-22 23:30) [2]

А что ты подразумеваешь под реальным размером??


 
VD601   (2003-06-22 23:36) [3]

2 jack128
не работает, все равно выдает 4 байта. Хотя в справке написано, что лучше, ребят, вы его не трогайте.

2circul
Сумма размеров всех полей, методов.


 
Ученик   (2003-06-22 23:39) [4]

>VD601 (22.06.03 23:36)
А должно быть ?


 
jack128   (2003-06-22 23:45) [5]


> не работает,

у меня работает.
TObject.InstanceSize = 4; // указатель на VTM???
type
TMyObj = class
feild : integer;
end;

TmyObj.InstanceSize = 8;


 
jack128   (2003-06-22 23:46) [6]


> указатель на VTM???
имелось в виду VMT - virtual method table, конечно.


 
VD601   (2003-06-23 00:17) [7]

2 jack128. Извиняюсь, все работает. Я вызывал InstanceSize у объекта класса. Интересно, почему не работало? (AViolation)


 
Palladin   (2003-06-23 00:21) [8]

все работает и с объектами...
скорее всего ты его не создал


 
jack128   (2003-06-23 00:22) [9]

скажу сразу - все что ниже мои домыслы.

class function TObject.InstanceSize: Longint;
asm
MOV EAX,[EAX].vmtInstanceSize
end;

при вызове
var obj : TmyObj;

obj.InstanceSize в EAX храниться указатель на объект obj, а приведенном коде подрузамевается, что в EAX - указатель на class TmyObj


 
jack128   (2003-06-23 00:25) [10]


> все работает и с объектами...
> скорее всего ты его не создал

ну вот..А я тут теорию создавал :-))


 
circul   (2003-06-23 01:42) [11]

>All
InstanceSize покажет такой размер:
4б(указатель на сам класс/экземпляр)+ сумма размеров данных в классе.

За бортом останутся размеры в памяти всех методов и процедур класса(память, выделенная под них).

VD601 (22.06.03 23:36)
2circul
Сумма размеров всех полей, методов.


Так что увы...


 
Юрий Зотов   (2003-06-23 08:01) [12]

> circul © (23.06.03 01:42)
> 4б(указатель на сам класс/экземпляр)...

На класс - да. Но только не на экземпляр. Без всяких дробей.


> За бортом останутся размеры в памяти всех методов и процедур
> класса(память, выделенная под них).

Если перевести слово "Instance", то увидим, что так и должно быть. InstanceSize дает размер ЭКЗЕМПЛЯРА класса, а код к нему не относится. Код ОДИН на класс, даже если в программе создан миллион его экземпляров.




 
VD601   (2003-06-24 16:16) [13]

Так ведь у экземпляра должны же быть хотя-бы указатели на собственные методы, их размер InstanceSize будет учитывать, и будет ли учитывать размеры полей материнских классов?


 
vuk   (2003-06-24 16:34) [14]

to VD601:
>Так ведь у экземпляра должны же быть хотя-бы указатели на
>собственные методы
У экземпляра есть указатель на класс. Этого достаточно.

>их размер InstanceSize будет учитывать
Нет. Это не нужно. Указатели на методы хранятся в VMT, а VMT находится через ссылку на класс.

>и будет ли учитывать размеры полей материнских классов
Да.



Страницы: 1 вся ветка

Текущий архив: 2003.07.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
14-20245
Bboy
2003-06-19 18:34
2003.07.07
Как попасть в автозагрузку к Win 2000???


3-19993
AkaSaint
2003-06-11 00:40
2003.07.07
Не могу создать Lookup-поле без DataSet


4-20342
Петр
2003-05-05 07:16
2003.07.07
Возникает ошибка EWin32Error


14-20312
Карелин Артем
2003-06-20 10:42
2003.07.07
Почему сны так трудно запомнить?


4-20355
DVM
2003-05-07 14:28
2003.07.07
Drag&Drop файлов из своей программы во внешние приложения.





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