Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
11-20030
2Nat
2002-10-28 17:34
2003.07.07
Просмотр значений строк списка при отладке


14-20189
Microsoft
2003-06-18 18:52
2003.07.07
Создание пиринговой сети


4-20363
atruhin
2003-05-05 12:51
2003.07.07
Service NT помогите! Срочно! Пожалуйста!


7-20322
Вадим
2003-04-23 13:33
2003.07.07
Internet Explorer и его меню


6-20184
V.exeR
2003-05-01 11:02
2003.07.07
FTP2Mail server





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