Главная страница
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.5 MB
Время: 0.017 c
1-20058
Brain Force
2003-06-25 17:52
2003.07.07
Народ, помогите с QuickRep-ом


14-20213
Maksss
2003-06-22 07:07
2003.07.07
нюк


3-19999
tramp
2003-06-11 17:22
2003.07.07
Заполнение таблицы(TADOTable) информацие из потока(TADOQuery)


1-20044
Semin Aleksei
2003-06-23 12:11
2003.07.07
С++ и Delphi по разному вызывают виртуальный метод в конструкторе


3-20001
DmitryNekl
2003-06-13 13:10
2003.07.07
Как создать connectionstring у компонента ADOConnection в runtime