Small Int and Char closures in GHCi

Joachim Breitner mail at joachim-breitner.de
Thu Aug 30 13:29:23 CEST 2012


Hi,

I am preparing a talk about the details of how data and programs look in
memory in Haskell (well, GHC). When explaining the memory consumption of
a large String, I wanted to show the effect of short-int-replacement
that happens in
http://hackage.haskell.org/trac/ghc/browser/rts/sm/Evac.c#L550

I use my ghc-heap-view-package to observe the heap. This programs shows
the effect:

        import GHC.HeapView
        import System.Mem
        
        main = do
            let hallo = "hallo"
            mapM_ (\x -> putStrLn $ show x ++ ": " ++ show (asBox x))
        hallo
            performGC
            mapM_ (\x -> putStrLn $ show x ++ ": " ++ show (asBox x))
        hallo

gives, as expected:

$ ./SmallChar 
'h': 0x00007f2811e042a8/1
'a': 0x00007f2811e08128/1
'l': 0x00007f2811e09ef0/1
'l': 0x00007f2811e0bcd8/1
'o': 0x00007f2811e0db10/1
'h': 0x00000000006d9bd0/1
'a': 0x00000000006d9b60/1
'l': 0x00000000006d9c10/1
'l': 0x00000000006d9c10/1
'o': 0x00000000006d9c40/1

but in GHCi, it does not work:

$ runhaskell SmallChar.hs 
'h': 0x00007f5334623d58/1
'a': 0x00007f5334626208/1
'l': 0x00007f5334627fc0/1
'l': 0x00007f5334629dc0/1
'o': 0x00007f533462bba8/1
'h': 0x00007f533381a1c8/1
'a': 0x00007f5333672e30/1
'l': 0x00007f533381a408/1
'l': 0x00007f533381a6b8/1
'o': 0x00007f533389c5d0/1

Note that the GC does evacuate the closures, as the pointers change. Why
are these not replaced by the static ones here?

Thanks,
Joachim
-- 
Joachim "nomeata" Breitner
  mail at joachim-breitner.de  |  nomeata at debian.org  |  GPG: 0x4743206C
  xmpp: nomeata at joachim-breitner.de | http://www.joachim-breitner.de/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20120830/02614a85/attachment.pgp>


More information about the Glasgow-haskell-users mailing list