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

Вниз

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

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

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

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


 
evvcom ©   (2003-04-25 11:17) [41]

> _Igorek
Ну попробуй.


 
Anatoly Podgorestky   (2003-04-25 11:21) [42]

Ну ну, посмотрю я на тебя, с повторами :-) Наполеон однако


 
_Igorek   (2003-04-25 11:38) [43]

evvcom © (25.04.03 11:17)
Что там пробовать? И не мне ж надо.


 
evvcom ©   (2003-04-25 11:40) [44]

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


 
Anatoly Podgorestky   (2003-04-25 11:41) [45]

Это из той же оперы, как объем памяти занимаемой программй, что то показывает, но к действительности это отношения не имеет.


 
Palladin ©   (2003-04-25 11:58) [46]


> KSergey © (25.04.03 09:56)

ага... ищущий... только он сам не знал чего искал...
целая толпа постов и все в пустую, здесь тоже самое
кроме может того что от темы уже пошли уклонения.


 
KSergey ©   (2003-04-25 12:23) [47]

Дак в этих "отклонениях" вся соль! Они позволяют показать проблему с другой стороны: с той, с которой ее вовсе нет или же она не решаема. Вот как.


 
Anatoly Podgorestky   (2003-04-25 12:25) [48]

Все крутится вокруг размера, с отклонениями в увесилительную сторону


 
race1 ©   (2003-04-25 13:11) [49]

Вопрос в следующем:

Есть переменная-запись, в полях которой есть динамические массивы переменных-записей, и динамические строки. Меня интересует размер, занимаемый этой переменной в памяти. Меня не интересует размер указателя этой переменной, а именно сколько данных в килобайтах в этой переменной хранится. Что бы было более наглядно, предлагаю код:


type

TSmallRec = record
str: Array of String;
end;

TBigRec = record
str: Array of String;
aSmallRec: Array of TSmallRec;
end;

var
BigRec: TBigRec;
i, j: Byte;

begin

SetLength ( BigRec.str, 100 );
for i := 0 to 99 do
aBigRec.str[i] := "Some dynamic text";

SetLength ( BigRec.aSmallRec, 100 );
for i := 0 to 99 do
begin
SetLength ( BigRec.aSmallRec[i].str, 100 );
for j := 0 to 99 do
BigRec.aSmallRec[i].str[j] := "Another some dynamic text";
end;

end;

Вот такая сложная структура. Что меня интересует - размер памяти, выделенной для переменной BigRec. Считаем вручную:

17 символов в каждом эл-те массива BigRec.str. Умножаем:
17 * 99 = 1683

25 символов в каждом эл-те массива BigRec.aSmallRec[i].str. Считаем:
25 * 99 = 2475

99 эл-ов массива BigRec.aSmallRec. Считаем:
99 * 2475 = 245025

Складываем:
1683 + 245025 = 246708

Вот это число ( 246708 ) я и хочу получить.

Вобщем уже понятно в каком направлении идти - проходится вручную по записи и складывать значения размеров массивов, строк и т.п. Короче, можно считать, что тема закрыта :) Просто первоначально я подумал, что одной строчечкой можно узнать эту цифру ( 246708 ), т.е. сколько для этой переменной выделено в памяти памяти.

Спасибо всем откликнувшимся :)


 
Palladin ©   (2003-04-25 13:23) [50]

happy end


 
KSergey ©   (2003-04-25 13:26) [51]

1 Рассчеты не верны. Даже если сойтись на желании посчитать сколько данных хранится в структуре (что вы и пытались сделать) то как минимум не учитываются различные служебные данные Delphi, необходимые дял всех этих хранений

2.Опять путанница с терминологией. Надо все же быть поаккуратнее с ней, ведь об этом вся ветка!
Так что в будущем все же аккуратнее с терминологией: размер переменной (указателя) не равен размеру полезных данных и уж тем более никак не равен тому объему памяти, который распределен системой для хранения всего этого безобразия (тут и служебные данные, и кусочность выделения памяти - никто ее с точностью до байта не выделяет и т.д.)


 
Anatoly Podgoretsky ©   (2003-04-25 17:51) [52]

Ну здесь довольно простая структура в два уровня, ди и то чтоно не ужнаешь (KSergey © (25.04.03 13:26)), а посмотри на структуры типа TList или того хуже, структуры где элементами будут классы, содержащие другие классы и скажем так что бы усложнить еще и указатели типа PChar - это особо тяжелый случай, тут даже анализ повторов не поможет.
Пусть PChar1 = @Buf, PChar2 = @Buf+N
Если сложить размеры то получим почти удвоение, что и происходит при оценке занятой программой памяти, многократный подсчет размера одной и то же ДЛЛ и других взаимно используемых объектов ОС, со свопом еще интереснее, а логически это ни как не отличается от твоего вопроса.

В простейших случаях можешь примерно расчитать объем, но примерно.


 
_Igorek   (2003-04-25 18:23) [53]

Удалено модератором
Примечание: По ошибке


 
LEON   (2003-04-25 19:40) [54]


>2 race1 © (25.04.03 13:11)



здесь ты ответил на свой же вопрос




> SetLength ( BigRec.str, 100 );
> for i := 0 to 99 do
> aBigRec.str[i] := "Some dynamic text";


> 17 символов в каждом эл-те массива BigRec.str. Умножаем:
> 17 * 99 = 1683

17 мы получаем по Length(Str);
а 100 по > SetLength ( BigRec.str, 100 ); надо запомнить куда -то, типа в переменную

и у тебя ошибка, 17 надо на 100, а не на 99 умножать,

SmallRecSize := a * Length(Str)
{a - та переменная, куда мы запомнили число 100}
теперь мы имеем размер всех строка в BigRec

аналогично для строк массива SmallRec

и размер BigRec равен кол-во smallrec в bigrec + размер массива в bigrec, определённый выше.


 
_Igorek   (2003-04-25 19:52) [55]

_Igorek (25.04.03 18:23)

Удалено модератором
Примечание: По ошибке

По чьей ошибке? :-)))



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

Текущий архив: 2003.05.08;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.024 c
14-23303
Supreme 2
2003-04-11 20:45
2003.05.08
---|Ветка была без названия|---


3-23026
galexis
2003-04-17 18:15
2003.05.08
Отбор записей из таблицы с разным значением определенного


1-23116
Adham
2003-04-27 07:45
2003.05.08
FileRead, FileWrite


14-23365
kaif
2003-04-20 16:24
2003.05.08
Delphi Update качается медленно...


1-23215
Zirus
2003-04-25 09:44
2003.05.08
из array