Maybe the problem is that you;re linking in the runtime.
See, with C, you can just dynamically link to the C runtime, MSCRT.DLL or something like that. If you're using Microsoft's C++ compiler, you can dynamically link to their C++ runtime. If you're building using MingW, your can link to the C runtime but you can't like to the C++ runtime beacuse of binary incompatibility.
So, when you build C++ with a MinGW compiler, you have to stick a lot of the C++ runtime right into the app. For all the other cases, those megabytes get loaded up at progra startup from other files.
The size of the binary is in fact a very poor metric for pretty much anything.