
J. Garrett Morris wrote:
Hello,
I have code which seems to contain a memory leak, but I'm not sure where it is or what's causing it. Any help would be greatly appreciated:
I see no memory leak in your code, it "just" breaks the garbage collector's heuristics by allocating an awful lot of data at once and then using no more memory. Try running your program with +RTS -F1.1 -RTS. (The -F option controls by how much the RTS increases the heap size when the heap gets exhausted. The default is to double it, but for this program a modest increment is much more sensible).
data Ratings = Ratings { movieCount :: Int , movieLookup :: IOUArray Int Word32 , movieRatings :: IOUArray Word32 Word32 } [snip] | otherwise = do writeArray movieRatings i rating -- ***
Btw, my first instinct was to suggest using ... $! rating here, but with unboxed arrays that's not necessary. [snip] Hope that helps, Bertram