Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объем памяти занимаемый программой, Как определить программным способом 
:(
    Опции темы
Step
Дата 9.6.2004, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



требуеться что бы прога выводила объем оперативной памяти которую занимает....

как ее определить...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
shedon
Дата 9.6.2004, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Можно что-то подобное изобразить:
Код

#include <windows.h>
#include <stdio.h>
#include "psapi.h"

void PrintMemoryInfo( )
{
  DWORD processID = GetCurrentProcessId();
   HANDLE hProcess;
   PROCESS_MEMORY_COUNTERS pmc;

   // Print the process identifier.

   printf( "\nProcess ID: %u\n", processID );

   // Print information about the memory usage of the process.

   hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );
   if (NULL == hProcess)
       return;

   if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
   {
       printf( "\tPageFaultCount: 0x%08X\n", pmc.PageFaultCount );
       printf( "\tPeakWorkingSetSize: 0x%08X\n",
                 pmc.PeakWorkingSetSize );
       printf( "\tWorkingSetSize: 0x%08X\n", pmc.WorkingSetSize );
       printf( "\tQuotaPeakPagedPoolUsage: 0x%08X\n",
                 pmc.QuotaPeakPagedPoolUsage );
       printf( "\tQuotaPagedPoolUsage: 0x%08X\n",
                 pmc.QuotaPagedPoolUsage );
       printf( "\tQuotaPeakNonPagedPoolUsage: 0x%08X\n",
                 pmc.QuotaPeakNonPagedPoolUsage );
       printf( "\tQuotaNonPagedPoolUsage: 0x%08X\n",
                 pmc.QuotaNonPagedPoolUsage );
       printf( "\tPagefileUsage: 0x%08X\n", pmc.PagefileUsage );
       printf( "\tPeakPagefileUsage: 0x%08X\n",
                 pmc.PeakPagefileUsage );
   }

   CloseHandle( hProcess );
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Step
Дата 9.6.2004, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



shedon , спасибо попробую сейчас



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
AndyY
Дата 9.6.2004, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



Скорее интересно не сколько всего памяти размещено, а кто, какими путями и зачем распределил сколько памяти. Еще интересней узнать это без дополнительных программ и удаленно (у программера на компе обычно все и так работает, а у юзера фиг знает где, да еще и бестолкового - скушало 200 мб за 2 дня и не воспроизводится).

решение есть, лежит в области установки хуков и трассировки стеков. Может как-нибудь статью напишу про это. Отправная точка - нужно отслеживать все вызовы VirtualAlloc и VirtualFree и складывать в мап с ключем - стек вызова.


--------------------
PM MAIL WWW   Вверх
mr.DUDA
Дата 9.6.2004, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Отправная точка - нужно отслеживать все вызовы VirtualAlloc и VirtualFree и складывать в мап с ключем - стек вызова.

Не совсем ясно, как тогда отслеживать выделение памяти по new/delete, работающие с "кучей" (или по malloc/free). Тем более, что VirtuallAlloc неэффективен с той стороны, что выделяет блоки памяти с размером, кратным размеру страницы памяти (4 Кб).


--------------------
user posted image
PM MAIL WWW   Вверх
AndyY
Дата 9.6.2004, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



mr.DUDA
Вы абсолютно правы, допустил неточность.
Перхватывать нужно HeapAlloc/HeapFree.
new реализован через malloc, malloc реализован через HeapAlloc. итд.
отслеживать естественно стек вызовов


--------------------
PM MAIL WWW   Вверх
Step
Дата 10.6.2004, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



НЕ товарищи вы меня не збивайте
у меня прога выделяет динамически такие объемы памяти что я и счетать не берусь
начина от 3 мерных массиво и кончаю уймой объектов
вот я нехочу считать а хочу после выделения просто узнать.....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
shedon
Дата 10.6.2004, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата
вот я нехочу считать а хочу после выделения просто узнать.....

Ну вот код который я привёл выше это и делает.


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Step
Дата 10.6.2004, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



shedon , тебе большая блогодарность
но я еще не нашел место в программе в котором у меня макс памяти, а делать слежение впадло



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 10.6.2004, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



тогда проверяй периодически


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 11.6.2004, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA,
у меня задача на графы, размерность бешенные у меня один граф просчитываеться 16 мин, и это время меняеться даже если я лишнюю операцию вставлю, ты представь как оно увеличиться если я переодически проверять буду......
мне нужно найти место где объем памяти максимальный и там взять значения, но при использовании рекурсии это трудновато сделать...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 11.6.2004, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Самый простой способ - это "завернуть" операции выделения и освобождения памяти в свои функции, которые будут увеличивать и уменьшать счётчик, и при каком-то макс. значении что-то делать (хотя как высчитать это макс. значение, а вдруг потом оно ещё раз увеличится wow.gif).


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 11.6.2004, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA , гемора много... блин профайл не работает почемуто...



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.