Определить, сколько памяти потребляет программа
Как узнать сколько (памяти) ресурсов потребляет программа
Как можно количество потребляемой памяти (и других ресурсов) посмотреть? IDE NetBeans
Определить список объектов, созданных приложением и сколько памяти потребляет каждый объект
Всем привет! Кто знает как можно проанализировать своё приложение? Например: список объектов.
Сколько оперативной памяти потребляет Windows 10 x64
На ноутбуку MSI GE 70-2oe windows 10, после установки последнего обновления начала потреблять.
Программа потребляет за 1гб физической памяти
Где могут быть ошибки в коде программы ? Она работает с небольшими текстами.
57 / 50 / 38
Регистрация: 22.01.2015
Сообщений: 176
Используй sizeof. Сумируй обьём всех элементов — и вот тебе место в байтах всей программы. Точнее твоих в ней изменениях. Если хочешь посмотреть на вес глобальнее — просто посмотри сколько весит экзешник, но это относительно винчестера.
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
Сообщение от Tordek
просто посмотри сколько весит экзешник
лучше запустить программу и посмотреть в диспетчере задач, сколько оперативы выделится на процесс.
8864 / 6641 / 907
Регистрация: 14.02.2011
Сообщений: 23,372
Сообщение от magog_
Сколько места заберет данная программа,
какого места?
у тебя используется куча и стек эта память которая выделится только при работе программы
а так же область глобальных переменных, коя может и влиять на размер файла
плюс сам код занимает память
в общем размер файла зависит от компилятора, оптимизатора и среды выполнения
в данной интерпретации вообще может не занимать память
оптимизатор видя все эти бесполезные выделения памяти и вызовы функции
может спокойно перевести эту программу в
1 2 3
int main(){ return 0; }
Регистрация: 29.10.2014
Сообщений: 30
имеется ввиду сколько памяти выделится при работе программы, мне это нужно научиться считать без помощи компилятора (тест такой будет). Т. е. как тут будут перекликаться глобальные массивы с массивами в foo, сколько забирает памяти динамическая аллокация и т д.
8864 / 6641 / 907
Регистрация: 14.02.2011
Сообщений: 23,372
Сообщение было отмечено magog_ как решение
Решение
Сообщение от magog_
имеется ввиду сколько памяти выделится при работе программы,
опять же какой памяти
ну вот смотри
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
short a[99000]; //здесь выделится 99000*2=198000 байт в глобальной области int *b[90000]; //90000*8=720000 байт там же int foo(void){ short a[30000], b[30000]; // на стеке будет использоватся (30000+30000)*2 =120000 байт, при выходе из функции это все освободится int *c;// на стеке 8 байт с=(int*)malloc(sizeof(int)*10000); // в куче 10000*4=40000 байт, будут висеть пока не сделаешь free . return c; } int main(void){ char *c; // на стеке 8 байт foo(); // при вызове функции тоже задействован стек,адрес возврата иногда аргументы return 0; }
Как узнать сколько памяти занимает программа c
elshiko → Квалификационный раунд Yandex Cup 2023
plourde27 → California Informatics Competition (CALICO) Fall ’23
Yhlas_Y → Favourite problem
islamicTerrorist69 → Facing problem in dynamic programming
SilverSurge → CSES Range Queries: Polynomial Queries
127.0.0.1 → Codeforces Round 907 (Div. 2)
_thor__ → Codeloop 2023: A Knockout Tournament Based Coding Contest
Yhlas_Y → IDE for cp
MikeMirzayanov → Please, read this
Imakf → Codeforces Round 906 Editorial
noomaK → IEEEXtreme 17.0 Problems Discussion
chenjb → Rescheduling of World Finals 22&23
anmolsainiii23 → Confused Regarding Cses 2nd DP Question
-kirito- → TheForces Round #25 Editorial
stdfloat → Is CF enough for IZHO, IOI?
DeadPixel99 → Help needed!
Vladosiya → Codeforces Command Lines (2023-10-06)
-kirito- → Invitation to TheForces #25 (5^2-Forces, TheForces-Rated, Prizes!)
one_autum_leaf → Find the number of rectangles of same color in a matrix
ryuukumar → What to learn to solve 1300 rated questions?
Imakf → Codeforces Round 906 (Div. 1, Div. 2)
74TrAkToR → Codeforces Round #904 (Div. 2) Editorial
whynesspower → Reverse check the questions: ChatGPT
aryang22 → Perhaps you should wait a little before giving up.
Alpha_Info → Listen to music?
Блог пользователя Lord_F
Автор Lord_F, 10 лет назад ,
Здравствуйте.
Как известно, решение задачи должно укладываться в определенные рамки времени работы и используемой памяти. Причем, чаще всего первое критичнее. Но не всегда.
В С++ можно следить за временем работы твоей программы, используя хотя бы clock(). А вот можно ли как-нибудь посмотреть, сколько памяти используется, проверить влезает ли программа в ML? Ну или хотя бы локально поставить такие ограничения?
Спасибо.
memory limit, память
Комментарии (9)
10 лет назад , # |
Если мне память не изменяет, то в C/C++ портабельного способа нет.
Количество доступной памяти можно, пожалуй, замерить если в цикле выделять и освобождать всё большие куски пока malloc не вернёт NULL.
А уж попытаться замерить сколько памяти уже использовано (кроме как нахождением разности доступной памяти в начале и в конце) — это по-моему дело страшное и платформозависимое.
Но вы же сами память выделяете — что вам мешает её считать и оценивать приблизительно? С этим даже в java с грехом пополам можно справиться по-моему (хотя «песочницы» на разных сайтах почему-то очень по-разному считают результат порой). А в C/C++ всё ощутимо прозрачнее, вроде. Ну просто оцените заранее сколько дополнительной памяти расходуют stl-ные структуры которыми вы пользуетесь и из этого исходите. Кажется так.
Как измерить количество используемой памяти
Навеяно вот этим ответом. Вдруг сообразил, что померить производительность программы я знаю как, а вот как определить, сколько ей требуется памяти — что-то у меня пробелы в образовании 🙂 Перехватывать new и delete ? сомнительно, не очень верится, что все будет работать только через эти операторы. Словом, никто не подскажет, как все-таки лучше, надежнее и точнее всего это делать, причем желательно не извне, а из самой программы? Конкретнее — Windows, использую Visual C++ 2017.
Отслеживать
задан 18 дек 2019 в 17:00
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
А вы уже видели подобный вопрос на SO (En)?
18 дек 2019 в 17:37
@ВЛ80 Нет, не видел.
18 дек 2019 в 17:47
Как посмотреть затрачиваемые ресурсы программы? сообщала о самых разнообразных ошибках — ошибки в студию
18 дек 2019 в 17:50
@user7860670 Уже завтра, сегодня голова уже не варит. Тот проект я уже прибил, заводиться с нуля сейчас не хочу.
18 дек 2019 в 17:59
Использую VS2015 pro, в отладчике есть отличная штука — Diagnostic Tools, которая позволяет снять снепшот памяти и проанализировать, чего и в каких количествах в ней выделялось. (Подозреваю, что VS2017 должна обладать этой тулзой тоже — в отладчике меню Debug->Windows->Show Diagnostic Tools)
19 дек 2019 в 4:11
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Для получения информации о памяти процесса есть несколько API, наиболее интересны из них:
- Функция GetProcessMemoryInfo
- Счетчики производительности
- Функция HeapSummary
#include #include #include #include "pdh.h" #pragma comment( lib, "Pdh.lib" ) long GetPrivateWorkingSet(const wchar_t* process) < PDH_HQUERY query; PDH_HCOUNTER counter; PDH_FMT_COUNTERVALUE counterVal; const wchar_t* name = L"\\Process(%s)\\Working Set - Private"; wchar_t buf[1024]=L""; swprintf_s(buf, 1024, name, process); PdhOpenQuery(NULL, NULL, &query); PDH_STATUS res = PdhAddEnglishCounter(query, buf, NULL, &counter); res = PdhCollectQueryData(query); PdhGetFormattedCounterValue(counter, PDH_FMT_LONG, NULL, &counterVal); long ret = counterVal.longValue; PdhCloseQuery(query); return ret; >void PrintMemory() < PROCESS_MEMORY_COUNTERS_EX pmc; GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc)); printf("Private committed memory: %u B\nWorking set: %u B\n", (UINT)pmc.PrivateUsage, (UINT)pmc.WorkingSetSize); printf("Private working set: %u B\n", (UINT)GetPrivateWorkingSet(L"Program")); HANDLE heaps[20]; HEAP_SUMMARY hs; DWORD cHeaps = GetProcessHeaps(20, heaps); for (DWORD i = 0; i < cHeaps; i++) < memset(&hs, 0, sizeof(hs)); hs.cb = sizeof(hs); if (HeapSummary(heaps[i], 0, &hs) == FALSE) printf("HeapSummary failed"); printf("Heap #%u size: %u B\n", (UINT)i, (UINT)hs.cbAllocated); >printf("\n"); > int main() < //первый запуск нужен для прогрева, т.е чтобы инициализировать внутренние структуры API //(так как API счетчиков производительности сам выделяет память при первом запуске) PrintMemory(); //второй запуск, соответственно, дает достоверные значения PrintMemory(); getchar(); >
Показатели, которые я здесь использую:
Private committed memory (Частная выделенная память) — объем виртуальной памяти процесса в состоянии MEM_COMMIT, принадлежащей исключительно этому процессу. Состояние MEM_COMMIT значит, что под данную память выделено место в файле подкачки, а в физической памяти оно может быть либо выделено, либо нет. Из данного значения исключена память, которая является разделяемой между разными процессами — отображенные на память файлы и загруженные DLL, отсюда «private». Звучит сложно, но по сути это и есть главный показатель, сколько процесс «жрет» памяти.
Working set (Рабочий набор) — общий объем физической памяти, выделенной процессу, в том числе разделяемой между несколькими процессами.
Private working set (Частный рабочий набор) — объем физической памяти, принадлежащей исключительно данному процессу. Этот показатель более полезен, чем предыдущий, но получить его сложнее.
Heap size — объем выделенной динамической памяти (помимо непосредственно выделенного нами через new , включает также то, что выделено внутренне библиотеками).
Какой из этих показателей использовать, сильно зависит от ситуации. Если речь о спортивном программировании и ограничении количества используемой памяти на решение задачи, интересен Private committed memory. Если же речь идет об оценке нагрузки на систему, важнее показатели физической памяти, так как она более дефицитна, чем место в файле подкачки.
Как узнать сколько памяти занимает программа c
Сообщений: 37
Как узнать сколько RAM хавает процесс
Всем привет!
Как под линухом програмно узнать сколько места занимает процесс в оперативной памяти? или подскажите где можно почитать про это, весь инет облазил
Студент 1 курса
Форумчанин Подтвердите свой е-майл
Регистрация: 27.06.2008
Сообщений: 959
ps aux | grep processname
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Пользователь
Регистрация: 21.10.2008
Сообщений: 37
ps aux | grep processname |
я имел ввиду как с помощью средств c++ это узнать
Последний раз редактировалось WOWka777; 01.02.2011 в 15:52 .
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
тебе дали команду. её можно использовать и в с++
#include #include #include // вроде так называется int main() < int ram_count; system("ps aux | grep processname >ramproc.txt"); ifstream f; f.open("ramproc.txt"); f >> ram_count; std::cout
Последний раз редактировалось NiCola999; 01.02.2011 в 16:23 .
Регистрация: 03.01.2011
Сообщений: 2,508
Странно, что kernel ещё не предложили пересобрать
#include #include #include #include #include ////////////////////////////////////////////////////////////////////////////// // // process_mem_usage(double &, double &) - takes two doubles by reference, // attempts to read the system-dependent data for a process' virtual memory // size and resident set size, and return the results in KB. // // On failure, returns 0.0, 0.0 void process_mem_usage(double& vm_usage, double& resident_set) < using std::ios_base; using std::ifstream; using std::string; vm_usage = 0.0; resident_set = 0.0; // 'file' stat seems to give the most reliable results // ifstream stat_stream("/proc/self/stat",ios_base::in); // dummy vars for leading entries in stat that we don't care about // string pid, comm, state, ppid, pgrp, session, tty_nr; string tpgid, flags, minflt, cminflt, majflt, cmajflt; string utime, stime, cutime, cstime, priority, nice; string O, itrealvalue, starttime; // the two fields we want // unsigned long vsize; long rss; stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> nice >> O >> itrealvalue >> starttime >> vsize >> rss; // don't care about the rest long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // in case x86-64 is configured to use 2MB pages vm_usage = vsize / 1024.0; resident_set = rss * page_size_kb; > int main()
«Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего.»