| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > объем памяти занимаемый программой |
| Автор: Step 9.6.2004, 14:10 |
| требуеться что бы прога выводила объем оперативной памяти которую занимает.... как ее определить... |
| Автор: shedon 9.6.2004, 14:55 | ||
Можно что-то подобное изобразить:
|
| Автор: Step 9.6.2004, 14:58 |
| shedon , спасибо попробую сейчас |
| Автор: AndyY 9.6.2004, 19:50 |
| Скорее интересно не сколько всего памяти размещено, а кто, какими путями и зачем распределил сколько памяти. Еще интересней узнать это без дополнительных программ и удаленно (у программера на компе обычно все и так работает, а у юзера фиг знает где, да еще и бестолкового - скушало 200 мб за 2 дня и не воспроизводится). решение есть, лежит в области установки хуков и трассировки стеков. Может как-нибудь статью напишу про это. Отправная точка - нужно отслеживать все вызовы VirtualAlloc и VirtualFree и складывать в мап с ключем - стек вызова. |
| Автор: mr.DUDA 9.6.2004, 20:45 | ||
Не совсем ясно, как тогда отслеживать выделение памяти по new/delete, работающие с "кучей" (или по malloc/free). Тем более, что VirtuallAlloc неэффективен с той стороны, что выделяет блоки памяти с размером, кратным размеру страницы памяти (4 Кб). |
| Автор: AndyY 9.6.2004, 21:09 |
| mr.DUDA Вы абсолютно правы, допустил неточность. Перхватывать нужно HeapAlloc/HeapFree. new реализован через malloc, malloc реализован через HeapAlloc. итд. отслеживать естественно стек вызовов |
| Автор: Step 10.6.2004, 10:13 |
| НЕ товарищи вы меня не збивайте у меня прога выделяет динамически такие объемы памяти что я и счетать не берусь начина от 3 мерных массиво и кончаю уймой объектов вот я нехочу считать а хочу после выделения просто узнать..... |
| Автор: shedon 10.6.2004, 10:26 | ||
Ну вот код который я привёл выше это и делает. |
| Автор: Step 10.6.2004, 10:30 |
| shedon , тебе большая блогодарность но я еще не нашел место в программе в котором у меня макс памяти, а делать слежение впадло |
| Автор: mr.DUDA 10.6.2004, 21:05 |
| тогда проверяй периодически |
| Автор: Step 11.6.2004, 08:00 |
| mr.DUDA, у меня задача на графы, размерность бешенные у меня один граф просчитываеться 16 мин, и это время меняеться даже если я лишнюю операцию вставлю, ты представь как оно увеличиться если я переодически проверять буду...... мне нужно найти место где объем памяти максимальный и там взять значения, но при использовании рекурсии это трудновато сделать... |
| Автор: mr.DUDA 11.6.2004, 08:45 |
| Самый простой способ - это "завернуть" операции выделения и освобождения памяти в свои функции, которые будут увеличивать и уменьшать счётчик, и при каком-то макс. значении что-то делать (хотя как высчитать это макс. значение, а вдруг потом оно ещё раз увеличится |
| Автор: Step 11.6.2004, 08:48 |
| mr.DUDA , гемора много... блин профайл не работает почемуто... |