Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизСколько места в оперативной памяти занимает переменная? Найти похожие ветки
← →
killer (2003-09-20 12:02) [0]Как узнать сколько места (байтов или битов) занимает в оперативной памяти переменная?
← →
Palladin (2003-09-20 12:06) [1]SizeOf
← →
Юрий Федоров (2003-09-20 12:13) [2]Это смотря какая переменная. В случае указателя (экземпляр класса, динамический массив, строка) SizeOf не подходит ))
← →
Владислав (2003-09-20 12:42) [3]> Юрий Федоров © (20.09.03 12:13) [2]
Ну почему же? Подходит. Просто 4 байта.
← →
Юрий Федоров (2003-09-20 12:44) [4]>>Владислав © (20.09.03 12:42) [3]
Это смотря что называть переменной )))
← →
Palladin (2003-09-20 12:46) [5]"Месть кота Леопольда" :)
Юрий Федоров имел в виду что таким образом действительный размер памяти выделеный в heap в контексте переменной-указателя получить при помощи SizeOf нельзя, а в случае если это экземплятор класса это значение вообще проблематично получить...
← →
Владислав (2003-09-20 12:58) [6]> Юрий Федоров © (20.09.03 12:44) [4]
Да что бы не назвать. Пофигу.
> Palladin © (20.09.03 12:46) [5]
"действительный размер памяти выделеный в heap в контексте переменной-указателя получить при помощи SizeOf нельзя"
Что бы это значило :-0?
p: Pointer;
...
ShowMessage(IntToStr(SizeOf(p)))
Чего покажет окно сообщения? Я думаю 4. И то действительно так (пока, во всяком случае). А вопрос, о том, сколько выделяется памяти подо что то, на что ссылается указатель, не стоял.
← →
Palladin (2003-09-20 13:05) [7]а это значит
p: Pointer;
...
GetMem(p,10)
ShowMessage(IntToStr(SizeOf(p^)))
выдаст 0...
← →
Владислав (2003-09-20 13:10) [8]А, ну это типа узнать размер неизвестно чего нельзя? Кстати, а разве p^ переменная? ;-)
← →
Palladin (2003-09-20 13:14) [9]нет :) но скажем
var
f:TForm;
e:TEdit;
бедняга killer выпадет в ступор если увидит что SizeOf(e)=4 и более того, факт, никаким законам логики killerа не подчиняющийся (ведь form она большаая), SizeOf(f) будет тоже 4....
вот об этом его и предупредили... очень размыто правда :)
← →
Владислав (2003-09-20 13:18) [10]"очень размыто правда :)"
То то и оно ;-)
← →
jack128 (2003-09-20 13:33) [11]
> а в случае если это экземплятор класса это значение вообще
> проблематично получить...
Вот как раз это то можно получить Tobject.InstanceSize. Другое дело что если поле класса например типа string, то его(поля) размер будет учитываться как 4 байта...
← →
MBo (2003-09-20 13:50) [12]Ага, а потом еще небось эту переменную понадобится "отчистить"...
← →
Verg (2003-09-20 13:51) [13]
> Ага, а потом еще небось эту переменную понадобится "отчистить"...
Ага, при том "полностью" или "железно"
← →
ki11er (2003-09-20 14:10) [14]
> А, ну это типа узнать размер неизвестно чего нельзя?
Можно.
← →
Владислав (2003-09-20 15:00) [15]> ki11er (20.09.03 14:10) [14]
Вам виднее ;-)
← →
Zacho (2003-09-20 15:17) [16]Размер неизвестно чего узнать можно, но только в неизвестных единицах измерения :)
← →
PVOzerski (2003-09-20 16:09) [17]А теперь "взвесьте" связный список, созданный динамически :^)
← →
ki11er (2003-09-20 19:28) [18]
> Размер неизвестно чего узнать можно, но только в неизвестных
> единицах измерения :)
Я имел в виду, что имея указатель (адрес любого объекта в памяти), под дэлфями можно узнать, сколько выделено под него памяти. Естесственно, если это "список" или что-то в этом роде, то можно получить только размер, выделенный под хранение самого объекта, т.е. без учета элементов списка.
← →
WihOut Any ... (2003-09-20 19:39) [19]2 ki11er
Пусть модератор меня покарает, а какого ... это тебя интересует, В ЧЁМ ПРИКОЛ? Экономия памяти или ИШО чо-о?
← →
Anatoly Podgoretsky (2003-09-20 20:18) [20]PVOzerski © (20.09.03 16:09) [17]
Закольцованный, или еще более сложную систему, где может быть множество ссылок, на такие же сложные структуры, включая на самого себя.
← →
ki11er (2003-09-22 13:54) [21]2 WihOut Any
Чувак, не путай меня ki11er"a с killer"ом.
Я не виноват, что он взял ник, очень похожий на мой ;-(
← →
default (2003-09-22 13:59) [22]кстати ведь можно писать
var
P: Pointer;
begin
GetMem(P, 5);
PByte(P) := 7;
FreeMem(P);
// ...
значит где-то хранится инфа об размере указателя, дальше сам
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.016 c