Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Вниз

var size   Найти похожие ветки 

 
race1   (2003-04-23 18:32) [0]

а как можно бы узнать размер моей переменной в памяти. Не размер структуры, а именно сколько этой переменной во время выполнения отведено памяти.


 
Skier   (2003-04-23 18:35) [1]

Спрость об этом Менеджер памяти Delphi


 
MBo   (2003-04-23 18:35) [2]

что за переменная?


 
Anatoly Podgoretsky   (2003-04-23 19:47) [3]

Переменная может быть не ограниченной слоэности/рекурсии


 
race1   (2003-04-24 04:40) [4]

а что такое менегер памяти и где он находитса? он в 5-ой Д есть?

а переменная - это запись, содержащая массивы записей и дригие типы данных


 
Digitman   (2003-04-24 09:19) [5]

размер_переменной_в_памяти := SizeOf(имя_переменной_или_тип_переменной)


 
race1   (2003-04-24 15:04) [6]

>Digitman © (24.04.03 09:19)
неа! мне сайзоф переменной вернул 4 байта, а на самом деле эта переменная занимает основную долю занимаемой программой памяти - мегабайт десять!


 
Dms   (2003-04-24 15:07) [7]

дык он вернул размер указателя, а это и есть 4 байта
размер можно узнать там же где и формируется массив ...
что именно там находится ?


 
Palladin   (2003-04-24 15:11) [8]


> race1 © (24.04.03 15:04)

ты имей совесть,
и различай переменные простого типа и переменные-объекты
содал не бось TList и Sizeof делаешь...


 
MBo   (2003-04-24 15:13) [9]

>Digitman
Поди её и "отчистить" потребуется ;)


 
Digitman   (2003-04-24 15:14) [10]

каков вопрос - таков и ответ)

ты спросил про размер памяти под переменную - я и ответил тебе
а что на самом деле являет собой содержимое той или иной переменной - это совсем другой вопрос !)


 
Digitman   (2003-04-24 15:20) [11]


> MBo


а это уже - к IronHawk !
он, знаешь ли, с некоторых пор - боооольшоооой дока в вопросе "очистки переменной совсем" !))))


 
KSergey   (2003-04-24 15:30) [12]

Anatoly Podgoretsky © (23.04.03 19:47)
Переменная может быть не ограниченной слоэности/рекурсии

Не совсем понял. Можно по-подробнее и, умоляю, без опечаток. А то не совсем понятно будет... Т.е. я не совсем понял при чем тут рекурсия... В смысле, что при рекурсивном вызове переменная как-бы займет кол-во памяти равное sozeof*кол-во рекурси? Ну так это другой вопрос, думаю. Или что-то другое имелось в виду? И особенно не понятно на счет "слоэности"


 
MBo   (2003-04-24 15:37) [13]

>KSergey
Объект или запись с полями - динамическими структурами или объектами и т.д.


 
KSergey   (2003-04-24 15:41) [14]

> MBo © (24.04.03 15:37)

Ааа, вот что имелось под слоеностью... А я то надеялся, что что-то такое, чего я недопонимаю... ;)


 
Digitman   (2003-04-24 15:45) [15]

Мне кажется, в самый раз дать всем дискутирующим возможность ЧЕТКО и ВСЛУХ определить, что есть термин "переменная" в программе. Во избежание сомнительных разногласий пусть это будет "переменная Паскаль-программы"


 
Anatoly Podgorestky   (2003-04-24 16:09) [16]

Когда справшивают сколько занимает переменная, то обычно подразумевают, всю память занимаемую ее сосвавляющими, количество составляющих может большим и иметь вложенность, и что самое страшное иметь циркулярную рекурсию. Если же говорит именно о переменной, то ответ простой SizeOf(var)


 
KSergey   (2003-04-24 16:32) [17]

Во-во, а что за зверь "циркулярная рекурсия"?


 
Anatoly Podgorestky   (2003-04-24 17:06) [18]

Это когда Х ссылается Y на тот на Z и опять на X/Y, обычно дело для сложных объектов, посчитать тут размеры памяти под объект не представляется возможным


 
R   (2003-04-25 02:25) [19]

В последнее время замечано что форум общие вопросы привратился в потрепаться, а на вопрос конкретно не отвечают.
Что тут не понятного человек спросил естественно о всей памяти занимаемой переменной, а не о 4кВ меня тоже этот вопрос интересует.


 
Не   (2003-04-25 02:56) [20]

понял! (Это из рекламы по ТВ).

2 R (25.04.03 02:25)
> В последнее время замечано что форум общие вопросы привратился >в потрепаться, а на вопрос конкретно не отвечают.
>Что тут не понятного человек спросил естественно о всей памяти >занимаемой переменной, а не о 4кВ меня тоже этот вопрос >интересует.

Размер памяти, занимаемой переменной - SizeOf.
Вопрос о "ВСЕЙ ПАМЯТИ, ЗАНИМАЕМОЙ ПЕРЕМЕННОЙ" - в общем случае не имеет ответа.



 
Shirson   (2003-04-25 07:52) [21]

>R
>В последнее время замечано что форум общие вопросы привратился в потрепаться, а на вопрос конкретно не отвечают.
Что тут не понятного человек спросил естественно о всей памяти занимаемой переменной, а не о 4кВ меня тоже этот вопрос интересует.

А это мода последнее время на мастаках такая - не отвечать, а глумиться.


>Не (25.04.03 02:56)
>Размер памяти, занимаемой переменной - SizeOf.

Хм... мне всегда казалось, что переменная и идентификатор переменной, это разные вещи. Хотя могу и ошибаться.


>race1

Попробуй использовать GlobalHandle, GlobalLock и GlobalSize. Это капризный вариант, но может сработать.



 
evvcom   (2003-04-25 08:01) [22]

> Shirson А это мода последнее время на мастаках такая - не отвечать, а глумиться.

Я раз несколько пытался на глупо поставленные вопросы сказать задающему, чтобы тот почитал статейку "Как правильно задавать вопросы". Потом устал. Если вижу в вопросе хоть какую-то разумность, то отвечаю, если нет, то нет. Но когда сквозит явная лень нажать на F1 и почитать, что на эту тему говорит уважаемый Borland, то волей-неволей возникает желание поглумиться.


 
KSergey   (2003-04-25 08:50) [23]

> Shirson © (25.04.03 07:52)

Как обычно - вопросы терминологии...
Размер переменной - всегда SizeOf. Стопудово.
Например,

var cl: TClass;

Здесь переменная - cl. Кто-то будет спорить? Надеюсь, что нет. А размер этой переменной равен SizeOf(cl). Стопудово.

Другое дело - размер памяти, занимаемой экземпляром класса после выполнения команды

cl := TClass.Create();

Так вот, возвращаясь к первоначальному вопросу "Не размер структуры, а именно сколько этой переменной во время выполнения отведено памяти" берусь утверждать, что размер переменной cl так и остался равным SizeOf(cl).
Так что защищать тут некого: каков вопрос - таков и ответ. Автор же не потрудился более точно этот вопрос сформулировать, хотя ему и намекали на это. Форма намеков была разной.
И совсем другое дело - это сколько экземпляр класса зайет памяти с учетом всей памати которую он дополнительно захватывает (на экземпляры других классов, просто так распределяет или не просто так). Но как это узнать - не знаю.
Но об этом ли был вопрос?


 
Shirson   (2003-04-25 08:54) [24]

>KSergey

Мне кажется все поняли, о чём именно спрашивал чел, но решили его построить, чтобы он это же спросил, но языком понятным остальным. Так?



 
race1   (2003-04-25 09:10) [25]

всё пошло от того, что кто-то сказал, что в Д есть менегер памяти. впоследсвии выяснилось, что этот менегер - sizeof(). потом ещё и выяснилось, что он не справляется с переменными, которые являются записями, в полях которых есть массивы переменных, так же являющихся записями. какой же он тогда менегер? :(



 
Anatoly Podgorestky   (2003-04-25 09:13) [26]

Очень странный и смелый вывод, тебя бы в Борланд, ведущим аналитиком. Заодно объяснишь им что такое менегер и какое отношение он имеет к sizeof


 
Palladin   (2003-04-25 09:21) [27]

:)))

> тебя бы в Борланд, ведущим аналитиком

чтоб развлекал выводами


 
Anatoly Podgorestky   (2003-04-25 09:32) [28]

Им там грустно, а так и производительно повысится и может создадут SizeOfMemoryManager


 
Anatoly Podgorestky   (2003-04-25 09:32) [29]

Ну это конечно если им сделать выводы про рекурсию


 
evvcom   (2003-04-25 09:37) [30]

> впоследсвии выяснилось, что этот менегер - sizeof()
В каком последствии?

> потом ещё и выяснилось, что он не справляется с переменными, которые являются записями, в полях которых есть массивы переменных, так же являющихся записями
Нормально со всем справляется. Например,

var
i: Integer;
type
TMyRec = record
i1, i2: Integer;
s1, s2: string;
end;
var
MyRec: TMyRec;
// Здесь sizeof(i) = sizeof(Integer) = 4
// sizeof(MyRec) = sizeof(TMyRec) = 16
// sizeof(MyRec.s1) = 4 - потому как string в сущности является указателем на строку


Что тут нелогичного? Размер переменных всегда остается постоянным, а вот размер данных, на которые указывают указатели, может изменяться. Не надо путать статику с динамикой.


 
KSergey   (2003-04-25 09:42) [31]

Для race1 © (25.04.03 09:10)
Почему вы так и не ответили на вопрос MBo © (23.04.03 18:35)? Ведь он был ключевой во всей этой ветке. И собственно не зная на него ответа нет смысла рассуждать. Только поподробенее бы, полное описание.
А "менегер" в Д5 есть стопудово ;) Только к SizeOf он не имеет никакого отношения. Да и, боюсь, спросить его ни о чем не удасться. Если не ошибаюсь и ничего не изменилось, то в Delphi при выделении памяти небольших размеров используется механизм зашитый в Delphi, а при распределении больших кусков - запросы просто пересылаются менеджеру памяти Windows (чуете, еще и в виндах такая же фигня есть!). Впрочем, менеджер Delphi (т.к. собственных-то ресурсов он не имеет) память естественно у тех же виндов запрашивает, только большими кусками, а потом ее нарезает - в розницу пускает, короче ;) Так что боюсь концов тут точно не найти. А если еще учесть, что объект на протяжении своей жизни может динамически запрашивть и освобождать память - то и вообще труба... Впрочем, пока это все не важно, потому что так и остался открытым вопрос что же за перменная у вас? А то тут все бошки ломают, телепатией пытаются заниматься - а все бестолку... Еще и от некоторых по башке за это получают..


 
Anatoly Podgorestky   (2003-04-25 09:46) [32]

KSergey © (25.04.03 09:42)
Только не отпугни его :-)


 
Palladin   (2003-04-25 09:48) [33]

эта ветка получается такая же как и про pointer(integer(p)+1)
забить на нее и все...


 
Anatoly Podgorestky   (2003-04-25 09:50) [34]

Не там шантаж, а здесь цирк


 
KSergey   (2003-04-25 09:52) [35]

> Anatoly Podgorestky (25.04.03 09:46)

От чего?

Впрочем, идейно вопрос, наверное, интересный: вот есть в некий момент времени некий объект - а сколько памяти треба на весь его с потрохами?
Вроде абстрактно рассуждая - это возможно: точки входа в выделялки памяти - в принципе известны (во всяком случае уверен, что их - счетное число), вроде можно отследить из метода какого класса произошел запрос на выделение памяти (пусть и при помощи дополнительного кода, сгенеренного гипотетическим компилятором). Было бы здорово: отработал деструктор объекта - и смотришь: ага, а вот кусок памяти, который был выделен этим объектом, но не освободился! Ищем ошибочку на счет утечки ума...

Вот только, на сколько я понимаю, в реальности таких механизмов не существует... Все ручками....


 
Anatoly Podgorestky   (2003-04-25 09:54) [36]

KSergey © (25.04.03 09:52)
От нас, и количество комиков станет меньше, будет грустно жить.


 
KSergey   (2003-04-25 09:56) [37]

> Palladin © (25.04.03 09:48)

Да нет, не совсем. Там человек бы в принципе ищущий, как мне показалось.
Просто отвечающие уперлись в одно - и все. А было досьаточно, как мне показалось, чуть шире указать автору на его ошибки (конкретные!) - и все. Но я дочитывать не стал, равно как и не написал необходимые на мой взгляд уточнения, т.к. подумал - вдруг кто-то дописал? Автор, конечно, наезжал, ну да судьба у него такая ;)


 
_Igorek   (2003-04-25 10:44) [38]

Можно приделать к классам "автоопределение своего размера". Скажем как интерфейс.
Потом сделать процедуру (а лучше клас) - обходчик сети обьектов, суммирующую память и не учитывающую уже пройденные обьекты. Так решиться проблема рекурсии.


 
Anatoly Podgorestky   (2003-04-25 10:49) [39]

И рекурсию поборет, любой сложности, ну ну, а просто представь себе кольцевую структуру


 
_Igorek   (2003-04-25 10:51) [40]

Забыл дописать, что итерфейс должен предоставлять доступ к обьектам, на котрые ссылается текущий.

Anatoly Podgorestky (25.04.03 10:49)
Так при повторе рекурсию дальше закручивать нет смысла.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.009 c
6-23261
Val_123
2003-03-13 15:05
2003.05.08
Невидимый WebBrowser


7-23402
BelchonokH
2003-03-16 02:07
2003.05.08
Звуковая карта


4-23429
Colt
2003-02-25 09:14
2003.05.08
Вывод текста на экран поверх всего.


1-23216
Viktor1
2003-04-25 10:08
2003.05.08
Код не работает! В чём проблеа не пойму. На форме ничего нет.


14-23320
Некто2002
2003-04-18 20:35
2003.05.08
XP, showmessage и





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский