Package: ghc6 Version: 6.4.1-1 Severity: normal I was writing a program that needed large quantities of random numbers, and so I used randomRs to generate a stream that I could consume:
map (lineChars!) $ randomRs (bounds lineChars) g lineChars is of course an array that I'm pulling elements from. Imagine my surprise when, within seconds of starting the compiled program, it had eating 80% of my virtual memory space! After learning how to use the GHC heap profiler, I was able to trace my troubles to the above expression. On a whim, I replaced it with the following expression (which ought to be equivalent): map (lineChars!) $ unfoldr (Just . randomR (bounds lineChars)) g As soon as I did so, the memory leak vanished. I don't understand why randomRs is eating tons of heap here, but it seems pretty clear that it's the culprit. I've attached the full program for inspection; it generates a number of lines (the number is given on the command-line) of random characters and spits them to stdout. The leak becomes pronounced when you get to around 50,000 to 100,000 lines of output. The "toSplit" binding is the one that leaks; I've included several alternative definitions, none of which leak. Daniel -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental'), (1, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.15-1-686 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Versions of packages ghc6 depends on: ii gcc 4:4.0.2-2 The GNU C compiler ii haskell-utils 1.6.0.1 Utilities used by the Debian Haske ii libc6 2.3.5-12 GNU C Library: Shared libraries an ii libgmp3-dev 4.1.4-11 Multiprecision arithmetic library ii libgmp3c2 4.1.4-11 Multiprecision arithmetic library ii libncurses5 5.5-1 Shared libraries for terminal hand ii libreadline5 5.1-5 GNU readline and history libraries ii libreadline5-dev 5.1-5 GNU readline and history libraries ii perl [perl5] 5.8.7-10 Larry Wall's Practical Extraction ghc6 recommends no packages. -- no debconf information
signature.asc
Description: Digital signature