
for what its worth, I second this suggestion.
----- Original Message -----
From: "Andrew Coppin"
Simon Marlow wrote:
I presume that the reason for this is to avoid handing memory back only to immediately need it again? (I.e., we don't want to be constantly asking the OS to allocate and deallocate memory. Allocate it once and then let the RTS handle it.)
How hard would it be to add a function to ask the RTS to shrink the allocated memory? E.g., you do something that you know consumes lots of RAM, you finish doing it, you know that your live set has probably gone way down now, so you ask the RTS to release some RAM if possible. Would that be difficult?
(I might be talking moonshine, but isn't the parallel GC based around a block-structured heap? Does that affect the difficulty of the problem one way or the other?)
We already have System.Mem, which currently contains a single function to "suggest" to the RTS that right now might be a good moment to perform some GC. I'd like to see some other functions added here - suggesting to the RTS that it should have a go at shrinking RAM usage is one, but it would be nice to at least be able to query how much RAM is allocated too. (I presume finding out how much we've allocated from the OS is fairly easy; finding out how much is live data is presumably far harder...) Maybe access to various interesting GC information - I don't know if the RTS actually records this stuff when not built for profiling though. (?)
Just my thoughts... :-)
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe