![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать объем памяти для данных? [D7, WinXP]
7D7 © (2006-10-24 21:15:00)Здрасте! Мастера, помогите пожалуйста решить маленькую проблему. В общем мне нужно узнать, каким образом можно найти общий объем памяти для данных, используемых каждой процедурой (описанных в ней).
Ketmar (2006-10-26 23:29:00) [1]>[18] 7D7 26-Oct-2006, 23:28
ты альтернативно одарённым себя пытаешься показать только здесь, или это беда всей жизни?
7D7 (2006-10-26 23:28:00) [2]procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
label1.Caption:=format('%p',[integer(@i)]);
end;
компилитругается, но при щелчке на кнопочку выбивает ошибку((. зато если вместо '%p' поставить'%x' то все ок!
7D7 (2006-10-26 23:11:00) [3]снкс, щас буду пробовать
Leonid Troyanovsky (2006-10-26 22:02:00) [4]
> Pavia © (26.10.06 21:57) [15]
> caption:=format('%x',[integer(@a[0])]);
format('%p', [@a]);
--
Regards, LVT.
Pavia (2006-10-26 21:57:00) [5]@A- получить адрес
caption:=format('%x',[integer(@a[0])]);
7D7 (2006-10-26 21:25:00) [6]помню что то про массивы, например:
a[0] адрес его слота $A4B
a[1] $A4F
...
ну не помню(можно сказать незнаю) как находятся адреса переменных((. Хелп плз
7D7 (2006-10-26 21:17:00) [7]Блин понимаю что читать надо было, но стормозил конкретно с этой темой, так вот до завтрашнего вечера мне нужно узнать как размещаются переменные в памяти(помню где то читал что то по этой теме, давно было, непомню:( ). Если кто может объяснить(на примере выше описаной процедуры), прошу помочь.
Leonid Troyanovsky (2006-10-26 19:18:00) [8]
> 7D7 (26.10.06 18:51) [11]
> А еще подскажите плз как провести анализ размещения данных
> в памяти с указанием их адресов?
VirtualQuery, msdn, нагуглить или почитать у Д. Рихтера.
--
Regards, LVT.
7D7 (2006-10-26 18:51:00) [9]>> Вон тебе и формулы для расчета
эт совсем ни то что нужно((
А еще подскажите плз как провести анализ размещения данных в памяти с указанием их адресов?
DrPass (2006-10-25 22:36:00) [10]
> 7D7 (25.10.06 22:14) [9]
Вон тебе и формулы для расчета
http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8
7D7 (2006-10-25 22:14:00) [11]>>классическую лабу "сравнить методы
а вот и не угадал... это не лаба, а курсач))
>> ее исполняемым кодом или данными?
данными
DrPass (2006-10-25 20:26:00) [12]
> 7D7 (25.10.06 19:47) [5]
Включая телепатор, рискну предположить - тебе задали классическую лабу "сравнить методы сортировки и указать для каждого метода количество перестановок и требуемое количество памяти".
Так вот, расслабься - ничего тебе от процедуры не нужно. Это чисто логическая задача. У тебя есть алгоритмы и моск. Включай моск и думай, сколько памяти нужно для того или иного алгоритма. Для Пузырька - N + 1, где N - число элементов в массиве
MetalFan (2006-10-25 19:50:00) [13]что значит "занимаемой процедурой"?
ее исполняемым кодом или данными? и зачем?
7D7 (2006-10-25 19:48:00) [14]кстати вышеописаная процедура- сортировка методом Пузырька
7D7 (2006-10-25 19:47:00) [15]>> не правильная постановка задачи
в общем так:
uses...
....
....
....
public (переменные вкатал сюда)
Mas:Array[0..20] of Integer;
Mas_A,Mas_B:Integer;
I,K,Kol:Integer;
Hag:Byte;
Rang:Integer;
Mem_Num:Integer;
Buffer_Num:Integer;
end
есть процедура
procedure TForm1.Timer1Timer(Sender: TObject);
Var K:Integer;
Har_A,Har_B:Integer;
begin
For K:=0 to 20 do If Mas[K] = Mas[K+1] then Mas[K+1]:=Rang; {алгоритм случайно сгенерированых неповторяющихся чисел}
Buffer_Num:=-1;
////////////////////////
For K:=1 to Hag do begin {интервал перебора}
Sleep(80); {Задержка для отображения сортировки}
Buffer_Num:=Buffer_Num+1;
Har_A:=Mas[Buffer_Num];
Har_B:=Mas[K];
If Har_A > Har_B then begin {Если шар А больше Б то сортируем}
Mem_Num:=Har_B;
Har_B:=Har_A;
Har_A:=Mem_Num;
Mas[Buffer_Num]:=Har_A;
Mas[K]:=Har_B;
Canvas.Pen.Color:=$0000FF; {Задаем фон для отображения сортировки}
Canvas.Brush.Color:=$0000FF;
Move;
end;
Canvas.Pen.Color:=$0070FF; {Основной фон отсортированных шаров}
Canvas.Brush.Color:=$0070FF;
Move;
end;
/////////////////////////
end;
как узнать занимаемый этой процедурой объем памяти?
Наиль (2006-10-24 22:03:00) [16]Так данных или процедуры?
Покажи на примере размер чего ты хочешь подсчитать.
PS. Очевидно, не правильная постановка задачи, а значит не получишь ни какого вразумительного ответа. Каков вопрос, таков ответ.
Суслик (2006-10-24 22:02:00) [17]
> а как узнать выделяемый объем памяти для какой либо процедуры?
В CPU можно посмотреть - сколько забирается из стека.
Но не стоит забывать, что объем памяти, забираемый у ОС, зависит не только от твоих типов, но и от манагера памяти, который в разных версиях delphi разный.
------
имхо самый правильный путь - просто знать как типы устроены - это все есть в справке.
7D7 (2006-10-24 21:51:00) [18]а как узнать выделяемый объем памяти для какой либо процедуры?
Desdechado (2006-10-24 21:19:00) [19]смотришь на типы своих переменнты, смотришь справку по типам, суммируешь
ЗЫ не забудь, что динамически выделяемая память может быть любой