Автор
|
Тема: Память, занятая процессом
|
VB |
опубликован 08-11-2001 00:28 MSK
Подскажите пожалуйста, как получить размер памяти, занимаемый приложением. Хорошо бы так же получить объем свободных "системных ресурсов".
|
SUnteXx
|
опубликован 08-11-2001 12:41 MSK
Присоединяюсь к вопросу!Можете написамть как получить объем свободных системных ресурсов для любой вынь (от 95 до ХР) |
Kasya
|
опубликован 08-11-2001 05:37 MSK
А вопрос то - хороший и ооочень интересный, тоже присоединяюсь ...
|
x
|
опубликован 08-11-2001 07:39 MSK
это элементарно господа хорошиеHeap32First Heap32Next это ToolHelp MSDN но вообще-то я вам советую читать MATT Peitrek "System programming" кста он только на английском |
HOMO_PROGRAMMATIS
|
опубликован 08-11-2001 08:27 MSK
Не-а! куча и модули - это далеко не вся память процесса. Предлагаю два способа: GetProcessWorkingSetSize (не проверял), VirtualQueryEx в цикле - сто пудов, сам делал. |
x
|
опубликован 08-11-2001 09:30 MSK
как это не вся? какая-же еще? Heap32* возвращает все выделенное LocalAlloc GlobalAlloc & VirtuallAllocчто там может быть еще? да кста 1 функция не работает в 98 и это-же установка параметров процесса 2=очень медленно |
migel
|
опубликован 08-11-2001 10:58 MSK
MSDN - статья Питрека PSAPIDEMO Periodicals 1996\MSJ\November\Under the HOOD кое что можно взять
|
HOMO_PROGRAMMATIS
|
опубликован 09-11-2001 09:21 MSK
Слушай, я сам не понимаю, какая там ещё память, но просто гарантирую, что это так, как я говорю. Запусти сапер и заметь, что куча=0 и exe-модуля в памяти нет. Я точно это знаю, тк уже полтора года пишу прогу, занимающуюся копанием в этой самой памяти. |
x
|
опубликован 09-11-2001 09:28 MSK
плиз линку на прогуда еще=я ядро мучал=VirtualAlloc=LocalAlloc=GlobalAlloc |
HOMO_PROGRAMMATIS
|
опубликован 09-11-2001 13:59 MSK
4x: Классное у тя имя! Крестьяне неграмотные тоже крестиком подписывались. По поводу линка - см. вопрос "Загляни - вопрос должен быть интересен для всех" |
x
|
опубликован 10-11-2001 02:12 MSK
это скорее привычка=не оставлять следов и не иметь постоянного ника |
VB
|
опубликован 10-11-2001 02:41 MSK
1. Существуют ли другие способы получения размера занимаемой памяти, кроме как самому пройти по всем выделенным блокам и сосчитать их? 2. Как получить размер системных ресурсов? 3. Может у кого-то есть соответствующие функции? Плиииз.
|
HOMO_PROGRAMMATIS
|
опубликован 10-11-2001 09:04 MSK
Я же говорил: 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
2 ХОМО_.... оооо я понял где собака порыласькогда ты грузишь PE у тебя сегменты мэпяться в память = НО ОНИ НЕ СЧИТАЮТСЯ ПРИНАДЛЕЖАЩИМИ ПРОЦЕССУ = пока в них нет записи это просто кэш диска=у тебя может быть 5 процессов с одним и тем-же .text что самое забавное что можно взять и отгрузить ненужный сегмент (ASP так и делает)=права доступа к нему присутствуют далее оказалось что NT неправильно считает размер памяти что занял процесс=если ты создашь 2 одинаковых , скажем по 1 мегу,то они будут занимать 1мег ВМЕСТЕ=а не каждый по отдельности как она гонит как обычно MS все раком делает, впрочем как и все остальные |
VB
|
опубликован 11-11-2001 17:07 MSK
Размер памяти посчитанный, как предлагает HOMO_PROGRAMMATIS, не совпадает с размером в Process Info. HOMO_PROGRAMMATIS = 2545 kb Process Info = 712 kb От чего получается такая разница?
|
HOMO_PROGRAMMATIS
|
опубликован 11-11-2001 21:25 MSK
Там есть две решительно разные фиговины: 1 - Bytes in memory 2 - bytes total. Мой способ считает 2. |
VB
|
опубликован 11-11-2001 22:53 MSK
2 HOMO_PROGRAMMATIS решительно Вам благодарен ;-) |