I created an intentional memory leak to demonstrate a point to people who will shortly be learning pointers.
int main()
{
while (1)
{
int *a = new int [2];
//delete [] a;
}
}
If this is run without the commented code, the memory stays low and doesn’t rise, as expected. However, if this is run as is, then on a machine with 2GB of RAM, the memory usage rapidly rises to about 1.5GB, or whatever is not in use by the system. Once it hits this point though, the CPU usage (which was previously max) greatly falls, and the memory usage as well, down to about 100MB.
What exactly caused this intervening action (if there’s something more specific than “Windows”, that’d be great), and why does the program not take up the CPU it would looping, but not terminate either? It seems like it’s stuck between the end of the loop and the end of main.
Windows XP, GCC, MinGW.
What’s probably happening is that your code allocates all available physical RAM. When it reaches that limit, the system starts to allocate space on the swap file for it. That means it’s (nearly) constantly waiting on the disk, so its CPU usage drops to (almost) zero.
The system may easily keep track of the fact that it never actually writes to the memory it allocates, so when it needs to be stored on the swap file, it’ll just make a small record basically saying “process X has N bytes of uninitialized storage” instead of actually copying all the data to the hard drive (but I’m not sure of that, and it may well depend on the exact system you’re using).