Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
14-20248
san1drug
2003-06-19 18:37
2003.07.07
Проблемы при отладке в Delphi7


14-20247
Bland
2003-06-19 21:44
2003.07.07
Инстолятор на delphi


14-20205
Barlok
2003-06-21 11:03
2003.07.07
Перевод в градусы синуса?


11-20026
lamachok
2002-10-29 19:56
2003.07.07
формы


3-20018
Max_
2003-06-11 13:36
2003.07.07
Экспорт TQuery результата в Paradox и Access!




   Наверх