• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

babreonok

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

garrymax

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

Отправил, но забыл вписать ссылку - тут уже сам разбирайся.
 
Z

zubr

Код:
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

Код:
 If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb)
Спасибо Zubr и от меня - в дельфи и в книгах API от мелкософта описание этой функции нет - решил полазить по сети и нашел интересную статью - GetProcessMemoryInfo выдает не точную информацию: есть функция NtQuerySystemInformation со своей структурой (пример структуры в той же статье), которая выдает реальный размер памяти - больше, чем показывает GetProcessMemoryInfo. А если GetProcessMemoryInfo то проще использовать GetProcessWorkingSetSize(GetCurrentProcess(),memMin,memMax); (переменные DWORD смысл по их именам), но они как раз из заголовка EXE-файла для SetProcessWorkingSetSize(толко недавно узнал). Теперь буду знать еще один более простой путь.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!