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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.009 c
1-23136
R
2003-04-28 03:31
2003.05.08
Непонятная процедура SetBounds


14-23333
Soft
2003-04-08 13:17
2003.05.08
Программисты это просто киборги


1-23147
Pasha
2003-04-24 12:01
2003.05.08
---|Ветка была без названия|---


1-23119
avkar
2003-04-27 16:57
2003.05.08
MessageDlg на русском


8-23236
reticon
2003-01-27 00:59
2003.05.08
можно ли поместить bmp в dll???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский