Главная страница
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.49 MB
Время: 0.018 c
4-20346
tiam
2003-05-07 10:01
2003.07.07
Динамическое подключение Dll


14-20208
Soft
2003-06-21 15:54
2003.07.07
Голосование за введение новых форумов Linux, Kylix


1-20138
picaroon
2003-06-25 08:23
2003.07.07
Передача переменных из формы в форму.


3-20007
Солер
2003-06-14 19:42
2003.07.07
Что за сообщение программы?


14-20303
leonidus
2003-06-18 21:44
2003.07.07
Накручивалка баннеров