Определение объёма памяти

  • Автор темы babreonok
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

babreonok

#1
Уважаемые делфятники, помогите бетному студенту!!!! :)
Я запускаю программу (консольную) с помощью функции CreateProcess. Как узнать сколько запущеная программа потребовала для хранения всех своих переменных???
Заранее благодарен.
 
G

garrymax

#2
Этот вопрос не в дельфинарии надо задовать, а тем, кто работает на Assembler и с API. Знаю только, что для EXE-шника выделяется память по его заголовку в поле IMAGE_DATA_DIRECTORY (это условное название и смещение я не помню), а для выделенного процесса параметры памяти выдает функция VirtualQuery - нарисуй ее в редакторе Delphi и нажми <F1> - хелп должен дать описание.

Отправил, но забыл вписать ссылку http://books.kulichki.com/data/lan/lan5/9.htm - тут уже сам разбирайся.
 
Z

zubr

#3
Код:
uses psAPI;

procedure TForm1.Button1Click(Sender: TObject);
var 
pmc:PPROCESS_MEMORY_COUNTERS;
begin
GetMem(pmc, SizeOf(_PROCESS_MEMORY_COUNTERS));
pmc.cb:=SizeOf(_PROCESS_MEMORY_COUNTERS);
If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb) then
Application.MessageBox(PChar(IntToStr(pmc^.WorkingSetSize)+' Bytes'),
'Memory', MB_OK or MB_ICONINFORMATION)
else
Application.MessageBox('Unable to retrieve memory usage structure',
'Memory', MB_OK or MB_ICONINFORMATION);
FreeMem(pmc);
end;
 
G

garrymax

#4
Код:
 If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb)
Спасибо Zubr и от меня - в дельфи и в книгах API от мелкософта описание этой функции нет - решил полазить по сети и нашел интересную статью http://www.void.ru/?do=printable&id=874 - GetProcessMemoryInfo выдает не точную информацию: есть функция NtQuerySystemInformation со своей структурой (пример структуры в той же статье), которая выдает реальный размер памяти - больше, чем показывает GetProcessMemoryInfo. А если GetProcessMemoryInfo то проще использовать GetProcessWorkingSetSize(GetCurrentProcess(),memMin,memMax); (переменные DWORD смысл по их именам), но они как раз из заголовка EXE-файла для SetProcessWorkingSetSize(толко недавно узнал). Теперь буду знать еще один более простой путь.
 
Статус
Закрыто для дальнейших ответов.