Форум: "Основная";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Внизкак узнать сколько занимают в памяти поля объекта? Найти похожие ветки
← →
FLIZ (2002-08-01 23:34) [0]ф-ия SizeOf(объект)
либо
SizeOf(его тип)
всегда возвращает одно
и тоже число. че-то я никак разобратся не могу :(
← →
Юрий Зотов (2002-08-01 23:47) [1]См. TObject.InstanceSize.
А SizeOf(объект)и SizeOf(его тип) - это то же самое, что SizeOf(Pointer). То есть, 4 байта.
← →
tovSuhov (2002-08-02 09:24) [2]Странно, разве SizeOf(TMyObject) не вернет мне размер в байтах моего объекта такого типа?
← →
MBo (2002-08-02 09:27) [3]tovSuhov
все уже написал Ю.Зотов
← →
tovSuhov (2002-08-02 09:35) [4]> MBo
Нет, меня просто смутила фраза ...SizeOf(его тип) - это то же самое, что SizeOf(Pointer). То есть, 4 байта
То, что SizeOf(объект) вернет размер указателя, это так. А вот вот насчет SizeOf(тип) сомневаюсь...В С++ возвращается именно размер типа. Ща попробую в паскале...
← →
MBo (2002-08-02 09:41) [5]не сомневайся, проверено электроникой. То же и для AnsiString
← →
tovSuhov (2002-08-02 09:45) [6]С++ Билдере, sizeof(TForm) = 752 байта, а в дельфях действительно 4. Надо же...
← →
Anatoly Podgoretsky (2002-08-02 09:53) [7]Все равно это не вся память
← →
tovSuhov (2002-08-02 10:00) [8]> Anatoly Podgoretsky
Это понятно...
А если не трудно, можете пояснить, почему так? В С++ похоже парень честно суммирует размеры всех входящих в тип полей, а что в Дельфи?
← →
NailS (2002-08-02 10:04) [9]Для TMyObject = object sizeof(TMyObject) вернет размер полей.
Это считай структура с возможностью определения функций.
Похоже на С++.
Для TMyObject = class(TObject) sizeof(TMyObject) вернет размер указателя на объект.
← →
DiamondShark (2002-08-02 11:10) [10]
> А если не трудно, можете пояснить, почему так? В С++ похоже
> парень честно суммирует размеры всех входящих в тип полей,
> а что в Дельфи?
C++
class TMyClass
{
//Fields
};
typedef TMyClass *PMyClass;
Delphi
type
TMyClass = class
//Fields
end;
Так вот дельфевый TMyClass -- это сишный PMyClass.
← →
Shaman_Naydak (2002-08-02 11:22) [11]В дельфях все переменные от класса (class) скрытые указатели, потому так и просходит..
В С+ же объект и есть объект.. как написали так и выделился..
Если же в дельфях нужно именно такой вариант см. наследие паскаля (object)
но я так понимаю, вопрос, скорее всего, теоретический
← →
DiamondShark (2002-08-02 11:23) [12]
> В С+ же объект и есть объект.. как написали так и выделился..
Что есть грубейшее нарушение парадигмы ООП
← →
Толик (2002-08-02 12:18) [13]to Anatoly Podgoretsky © (02.08.02 09:53)
Неправда Ваша: sizeof(TForm) в С++ = TForm.InstanceSize() в Делфи. Оператор sizeof в С++ всегда показывает правильный размер.
to DiamondShark © (02.08.02 11:23)
Вот только не надо про то, что С++ нарушает "парадигмы ООП".
Интересно, в чём же Вы это усмотрели??? :)
← →
Старый Паскалист (2002-08-02 12:26) [14]2DiamondShark
Дело в том, что ООП - не единственная парадигма, поддерживаемая С++. Есть ещё generic programming. (Может, есть и чего-то ещё...)
2Толик
Поля объекта тоже могут быть объектами. Их размер не учитывается (Правда, в Сях они могут быть статическими - тогда учтутся).
← →
Anatoly Podgoretsky (2002-08-02 12:28) [15]Толик © (02.08.02 12:18)
Думаю тебе ответа от старого программисте достаточно?
Ну вот еще один есть три объекта, у котороых есть поля указатель на другой объект, сумма их размера
1. вариант 1 - у каждого указывает на разные объекты
2. вариант 2 - у каждого указывает на один и тот же объект
← →
DiamondShark (2002-08-02 13:51) [16]
> Вот только не надо про то, что С++ нарушает "парадигмы ООП".
> Интересно, в чём же Вы это усмотрели??? :)
Насчет "парадигмы" и правда, погорячился, а вот один из принципов -- точно, причем с последствиями не только для "красоты теории".
А Вы не усматривате? Тогда это Вам домашнее задание, на самостоятельное изучение.
> Есть ещё generic programming.
А это с чем едят? Знаю процедурное, знаю структурное, модульное, ООП, декларативное.
А generic -- это как?
← →
Толик (2002-08-02 14:27) [17]to Старый Паскалист (02.08.02 12:26),
Anatoly Podgoretsky © (02.08.02 12:28)
Если полем объекта является ОБЪЕКТ, то его размер будет учтён в sizeof, а вот если УКАЗАТЕЛЬ НА ОБЪЕКТ то sizeof совершенно справедливо посчитает 4 байта. Честно говоря я здесь никакой проблемы не вижу. Например есть объект A с размером 20 байт, есть объект B размером 10 байт, который ещё содержит указатель на A (+ 4 байта). Естесственно, что размер sizeof(B) будет 14 байт (а не 30), ведь остальные 20 байт относятся в объекту A, а к объекту B относится только УКАЗАТЕЛЬ на А!!! Так что всё в порядке...
← →
Старый Паскалист (2002-08-02 14:55) [18]2Толик ©
В Дельфи нет ОБЪЕКТОВ в том понимании, в котором ты написал.
(за исключением устаревшего object)
Все они суть УКАЗАТЕЛИ НА ОБЪЕКТ. Поэтому sizeof всегда даёт 4.
Тем не менее объектное поле (в Дельфи всегда - указатель на объект) может быть неотемлемой частью другого объекта, которое владелец создаёт и уничтожает, и даёт доступ к такому объекту только через SetXXX => Assign.
2DiamondShark © generic (обобщённое программирование) - шаблоны и иже с ними. Грубо говоря, классы для комплексных чисел, сток и тд (шаблонные ли, нешаблонные ли) - это не ООП, это как раз обобщённое программирование.
Как раз такие классы в основном создаются статически.
В парадигме ООП классы (из-за возможности наследования) всегда создаются динамически.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c