Форум: "Основная";
Текущий архив: 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