![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размер стека
Alex_Korn © (2005-10-11 14:21:00)Как определить какую часть стековой памяти
занимает программа в данный момент времени ?
Leonid Troyanovsky (2005-10-12 09:43:00) [21]
> Alex_Korn © (12.10.05 07:35) [2]
> Я в программе использую рекурсию и меня интересует вопрос
> сколько процентов стека я занял на данный момент от "Stack
> overload".
В тот момент, когда появляется Stack overflow поздно считать проценты,
бо все, что можно было выделить потоку было выделено (стек растет
динамически, по мере необходимости).
Самая распространенная причина - ошибка в рекурсивных функциях,
от коих и следует тщательнейшим образом избавляться (ничего
сверхестественного для этого не требуется).
--
Regards, LVT.
MBo (2005-10-12 09:08:00) [22]Что за алгоритм?
Alex_Korn (2005-10-12 09:04:00) [23]MBo © (12.10.05 7:53) [3]
Рекурсия у меня ограничена количеством элементов, которые надо
обработать. Их ( элементов ) фиксированное число, имеющее
верхнюю границу.
Отказываться от рекурсии, в моем случае, нецелесообразно.
MBo (2005-10-12 07:53:00) [24]>Я в программе использую рекурсию и меня интересует вопрос
Такие проблемы решаются тщательным планированием алгоритма с целью (разумного) ограничения рекурсии. Во многих случаях от нее вообще можно избавиться.
Alex_Korn (2005-10-12 07:35:00) [25]Digitman © (11.10.05 14:42) [1]
Спасибо !
Я имел ввиду следующее:
Бывает ошибка - "Stack overload".
Я в программе использую рекурсию и меня интересует вопрос
сколько процентов стека я занял на данный момент от "Stack overload".
Digitman (2005-10-11 14:42:00) [26]хм... непонятно что тебя интересует ...
попробую протелепатировать :
procedure TForm1.Button3Click(Sender: TObject);
var
p: Pointer;
mbi: TMemorybasicInformation;
begin
asm
mov p, esp;
end;
VirtualQuery(pointer(findhinstance(p)), mbi, sizeof(mbi));
showmessage(inttohex(mbi.RegionSize, 8));
end;