[Haskell-cafe] IORef memory leak

Don Stewart dons at galois.com
Fri Jun 19 12:09:12 EDT 2009


dvde:
>
> Don Stewart schrieb:
>> It is not possible to write a modifyIORef that *doesn't* leak memory!
>>   
> Why? Or can one read about it somewhere?


Try writing a version of this program, using modifyIORef only, 
such that it doesn't exhaust the heap:

    import Data.IORef
    import Control.Monad
    import System.IO.Unsafe

    ref :: IORef Int
    ref = unsafePerformIO $ newIORef 0
    {-# NOINLINE ref #-}

    main = do
        modifyIORef ref (\a -> a + 1)
        main

Run it in a constrained environment, so you don't thrash:

    $ ./A +RTS -M100M
    Heap exhausted;
    Current maximum heap size is 99999744 bytes (95 MB);
    use `+RTS -M<size>' to increase it.

The goal is to run in constant space.

-- Don


More information about the Haskell-Cafe mailing list