Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

как узнать сколько занимают в памяти поля объекта?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
14-48269
Vladimir ;)
2002-07-21 02:29
2002.08.15
Помогите с делом!


7-48333
SleD
2002-06-01 19:04
2002.08.15
Как осуществить по XP (2000, NT) следующее:


3-48012
cooluser
2002-07-28 08:59
2002.08.15
Просмтор содержимого БД. TListView


14-48314
Kombat
2002-07-22 22:45
2002.08.15
Как передать проект заказчику с частичным кодом?


4-48353
anod
2002-06-09 14:19
2002.08.15
TrackBar