There are enough possibilities that you can't do a good job guessing at them. In your situation you should look at the details.
While the process is still running and using significantly more virtual memory than you think is appropriate, grab a copy of the details of its virtual memory use:
Code:
cp /proc/pid/smaps some_file
Replace
pid with the pid of the process you are investigating. Then look through some_file with a text editor to get some understanding of the virtual memory use of the process.
Further investigation depends on what you see in that file. If it is a massive number of tiny allocations, you might need some post processing to dig out the useful info. If you can find some very large individual allocations, those should be directly understandable.
As a first step in understanding one of those files myself, I used a smart search tool in my text editor that let me search for all occurrences of:
Size: followed by 12 ignored characters, followed by a non blank.
That finds every allocation of 100MB of more. In the large process I just looked at there was exactly one allocation over 100MB and that was the bulk of the process's memory use. So it was easy to find that and ignore all the tiny allocations. I don't know whether your example will be that easy. (I don't know how to do such text searches in whatever text editor or viewer you use. But if that is a problem, I'm sure plenty of others at LQ could answer that. I'm on a mixed OS lan, so I used Visual Studio on Windows to look at my file on Linux).