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

Тема в разделе "Delphi - Система", создана пользователем babreonok, 14 июл 2006.

Статус темы:
Закрыта.
  1. babreonok

    babreonok Гость

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

    garrymax Гость

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

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

    zubr Гость

    Код (Text):
    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;
     
  4. garrymax

    garrymax Гость

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

    zubr Гость

    Как это нет, обычная документированная функция, см. MSDN
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей