Ahhhh, the beauty of Windows!! A typical new PC needs 4 billion megabytes of RAM just to boot up these days!
I'm not sure about your extra components but you should look through your application's code not only for memory leaks but the sizes of variables and objects you are creating.
First things first, try and limit the sizes of variables wherever possible. A classic example would be when you declare a variable to use as a simple counter:
int counter = 0;
while (counter<125) { // do something }
the above may seem like the obvious thing to most C++ programmers. However, you could accomplish the very same thing and only use a quarter of the memory by exchanging the int for a single byte type such as unsigned char.
unsigned char counter = 0;
while (counter<125) { // do same but 1/4 memory }
Obviously, you can only do this when the numerical ranges are within scope:
unsigned char = 1 byte (range 0-255)
unsigned short = 2 bytes (range 0-65535)
int = 4 bytes (range approx 2 billion or something!)
It's amazing how much memory you can save using smaller variables for such purposes.
Now for the next step: MEMORY LEAKS!!!!
You really need to go through and chech your project is putting all memory back once it's finished with it.
For example, if you create objects using the new command, make sure you have a delete command to back it up:
CSomeClass* myObject = new CSomeClass;
// do something with the class
delete myObject // put the memory back!!
The worst offenders in the context of memory leaks are GDI objects such as CDCs, CBitmaps, CFonts, CPens, CBrushes etc.
ALWAYS make sure you call the GDI object's DeleteObject() member function when you've finished with it!! It's inccredible how much memory these GDI things take up and how quickly it accumulates when you neglect to delete them!