Текущий архив: 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