• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

babreonok

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

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab