WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Память, занятая процессом

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Память, занятая процессом
VB опубликован 08-11-2001 00:28 MSK   Click Here to See the Profile for VB   Click Here to Email VB  
Подскажите пожалуйста, как получить размер памяти, занимаемый приложением. Хорошо бы так же получить объем свободных "системных ресурсов".
SUnteXx опубликован 08-11-2001 12:41 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Присоединяюсь к вопросу!

Можете написамть как получить объем свободных системных ресурсов для любой вынь (от 95 до ХР)

Kasya опубликован 08-11-2001 05:37 MSK     Click Here to See the Profile for Kasya  Click Here to Email Kasya     
А вопрос то - хороший и ооочень интересный, тоже присоединяюсь ...
x опубликован 08-11-2001 07:39 MSK     Click Here to See the Profile for x  Click Here to Email x     
это элементарно господа хорошие

Heap32First
Heap32Next

это ToolHelp MSDN

но вообще-то я вам советую читать
MATT Peitrek "System programming"
кста он только на английском

HOMO_PROGRAMMATIS опубликован 08-11-2001 08:27 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Не-а! куча и модули - это далеко не вся память процесса. Предлагаю два способа: GetProcessWorkingSetSize (не проверял), VirtualQueryEx в цикле - сто пудов, сам делал.
x опубликован 08-11-2001 09:30 MSK     Click Here to See the Profile for x  Click Here to Email x     
как это не вся?
какая-же еще?
Heap32* возвращает все выделенное LocalAlloc
GlobalAlloc & VirtuallAlloc

что там может быть еще?

да кста
1 функция не работает в 98 и это-же установка параметров процесса
2=очень медленно

migel опубликован 08-11-2001 10:58 MSK     Click Here to See the Profile for migel  Click Here to Email migel     
MSDN - статья Питрека
PSAPIDEMO
Periodicals 1996\MSJ\November\Under the HOOD
кое что можно взять
HOMO_PROGRAMMATIS опубликован 09-11-2001 09:21 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Слушай, я сам не понимаю, какая там ещё память, но просто гарантирую, что это так, как я говорю. Запусти сапер и заметь, что куча=0 и exe-модуля в памяти нет. Я точно это знаю, тк уже полтора года пишу прогу, занимающуюся копанием в этой самой памяти.
x опубликован 09-11-2001 09:28 MSK     Click Here to See the Profile for x  Click Here to Email x     
плиз линку на прогу

да еще=я ядро мучал=VirtualAlloc=LocalAlloc=GlobalAlloc

HOMO_PROGRAMMATIS опубликован 09-11-2001 13:59 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
4x: Классное у тя имя! Крестьяне неграмотные тоже крестиком подписывались. По поводу линка - см. вопрос "Загляни - вопрос должен быть интересен для всех"
x опубликован 10-11-2001 02:12 MSK     Click Here to See the Profile for x  Click Here to Email x     
это скорее привычка=не оставлять следов и не иметь постоянного ника
VB опубликован 10-11-2001 02:41 MSK     Click Here to See the Profile for VB  Click Here to Email VB     
1. Существуют ли другие способы получения размера занимаемой памяти, кроме как самому пройти по всем выделенным блокам и сосчитать их?
2. Как получить размер системных ресурсов?
3. Может у кого-то есть соответствующие функции? Плиииз.
HOMO_PROGRAMMATIS опубликован 10-11-2001 09:04 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Я же говорил: GetProcessWorkingSetSize должна помочь. Подсчёт блоков:

DWORD GetPagesSize(DWORD PID)
{
MEMORY_BASIC_INFORMATION myMBI;

BOOL BAddrOK,FreeOK,ReservedOK;

DWORD ThisValueWillBeReturned=0;
HANDLE p=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
for (DWORD CountForPages=0;VirtualQueryEx(p,(LPCVOID) (CountForPages+1),&myMBI,sizeof(MEMORY_BASIC_INFORMATION));CountForPages=(DWORD)myMBI.BaseAddress + myMBI.RegionSize + 1)
{ //for pages
BAddrOK=((DWORD)myMBI.RegionSize);
FreeOK= (myMBI.State != MEM_FREE);
ReservedOK=((myMBI.State != MEM_RESERVE);
if ( BAddrOK && FreeOK && ReservedOK)
{
ThisValueWillBeReturned += myMBI.RegionSize;
}
}
return ThisValueWillBeReturned;
}

x опубликован 11-11-2001 03:55 MSK     Click Here to See the Profile for x  Click Here to Email x     
2 ХОМО_....
оооо
я понял где собака порылась

когда ты грузишь PE у тебя сегменты мэпяться в память = НО ОНИ НЕ СЧИТАЮТСЯ ПРИНАДЛЕЖАЩИМИ ПРОЦЕССУ = пока в них нет записи это просто кэш диска=у тебя может быть 5 процессов с одним и тем-же .text

что самое забавное что можно взять и отгрузить ненужный сегмент (ASP так и делает)=права доступа к нему присутствуют

далее оказалось что NT неправильно считает размер памяти что занял процесс=если ты создашь 2 одинаковых , скажем по 1 мегу,то они будут занимать 1мег ВМЕСТЕ=а не каждый по отдельности как она гонит

как обычно MS все раком делает, впрочем как и все остальные

VB опубликован 11-11-2001 17:07 MSK     Click Here to See the Profile for VB  Click Here to Email VB     
Размер памяти посчитанный, как предлагает HOMO_PROGRAMMATIS, не совпадает с размером в Process Info.
HOMO_PROGRAMMATIS = 2545 kb
Process Info = 712 kb
От чего получается такая разница?
HOMO_PROGRAMMATIS опубликован 11-11-2001 21:25 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Там есть две решительно разные фиговины:
1 - Bytes in memory
2 - bytes total.
Мой способ считает 2.
VB опубликован 11-11-2001 22:53 MSK     Click Here to See the Profile for VB  Click Here to Email VB     
2 HOMO_PROGRAMMATIS
решительно Вам благодарен ;-)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.