I have an issue with memory management in various operating systems.
My program is a server that does some processing that could take a few GB of memory. After that,
the way memory is allocated (and maybe given back to the OS) is in the libc, i assume. The Programming language / library stack you are using might be of reason for this.
I assume glibc will return non-fragmented memory at the top of the heap. Your process might allocate 10MB of data it will use all the time. After that, 500MB of data that is used in processing will be allocated. After that, a tiny fragment of data that is kept even after the processing (might be the result of the processing) is allocated. After that another 500MB is allocated Memory layout is:
|10MB used|500 MB processing|1MB result|500MB processing| = 1011 MB total
When the 1000MB are freed, the memory layout is
|10MB used|500MB freed|1MB result|500 MB freed| glibc might now return the memory at the end... |10MB used|500MB freed|1MB result| = 511 MB "in use" also only 11MB of that is used.
I assume that is what happens, you'll need to do further research (seperate memory pools come to mind) to ensure all memory will be freed