Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How much memory is my windows app really using?

I have a long-running memory hog of an experimental program, and I'd like to know it's actual memory footprint. The Task Manager says (in windows7-64) that the app is consuming 800 mb of memory, but the total amount of memory allocated, also according to the task manager, is 3.7gb. The sum of all the allocated memory does not equal 3.7gb. How can I determine, on the fly, how much memory my application is actually consuming.

Corollary: What memory is the task manager actually reporting? It doesn't seem to be all the memory that's allocated to the app itself.

like image 427
mmr Avatar asked Jul 22 '09 16:07

mmr


People also ask

Why is memory usage at 100%?

Why is my memory usage so high in Windows 10? One reason could be a big program or game that takes high system RAM. The other reason could be malware that caused your device high memory usage.


2 Answers

As I understand it, Task manager shows the Working Set;

working set: The set of memory pages recently touched by the threads of a process. If free memory in the computer is above a threshold, pages are left in the working set of a process even if they are not being used. When free memory falls below a threshold, pages are trimmed from the working set.

via http://msdn.microsoft.com/en-us/library/cc432779(PROT.10).aspx

You can get Task Manager to show Virtual Memory as well.

I usually use perfmon (Start -> Run... -> perfmon) to track memory usage, using the Private Bytes counter. It reflects memory allocated by your normal allocators (new/HeapAlloc/malloc, etc).

like image 160
Kim Gräsman Avatar answered Oct 16 '22 01:10

Kim Gräsman


Memory is a tricky thing to measure. An application might reserve lots of virtual memory but not actually use much of it. Some of the memory might be shared; that is, a shared DLL might be loaded in to the address space of several applications but it is only loaded in to physical memory once.

A good measure is the working set, which is the set of pages in its virtual address space that have been accessed recently. What the meaning of 'accessed recently' is depends on the operating system and its page replacement algorithm. In other words, it is the actual set of virtual pages that are mapped in to physical memory and are in use at the moment. This is what the task manager shows you.

The virtual memory usage is the amount of virtual pages that have been reserved (note that not all of these will have actually been committed, that is, had physical backing store allocated for it. You can add this to the display in task manager by clicking View -> Select Columns.

The most important thing though: If you want to actually measure how much memory your program is using to see if you need to optimize some of it for space or choose better data structures or persist some things to disk, using the task manager is the wrong approach. You should almost certainly be using a profiler.

like image 41
IRBMe Avatar answered Oct 16 '22 01:10

IRBMe