Yes, you can do this and I’ve done it many times. They’re still instances of the same program / application.
Keep in mind that when you load any software which uses a DLL, the DLL’s get pushed into shared memory. These are accessible by any instance of the program.
So… if the very first instance of an application consumes 100mb of memory and 50mb of that is DLL loading, then a second instance would only add another 50mb to main memory because the DLL’s from the first instance are already loaded. This is taken care of for us by the operating system…
So, when I say “instance”, I don’t make a distinction between engine version numbers because it really doesn’t matter that much.
As for the memory leaks, I’ve run into these problems with UE4. I have 24Gb of main memory on my machine and when nothing is running, I sit around 2gb of usage. When I load UE4 and my project, I sit around 6-8gb. However, there are some things which will cause UE4 to allocate a ridiculous amount of memory (like, 105939459gb) which will cause an instant spike of my available physical memory usage, cause the OS to start paging out to the page file as fast as it can so that it can satisfy the malloc request, and because the OS is blocking on the page file request, the whole computer freezes and I have to reboot. These funky malloc requests generally happen when a uasset is corrupted (which can happen between engine versions) or when you have an infinite loop somewhere. I wish there was some internal engine logic that says, “hey, this malloc request is way crazy! we will crash the engine or abort with an assert before we freeze the computer.”