
Hello glasgow-haskell-users, i have program that holds in memory a lot of strings (filenames) and use my own packed-string library to represent these string. this library uses newByteArray# to allocate strings. in my benchmark run (with 300.000 filenames in memory) program prints the following statistics: 37,502,956 bytes maximum residency (16 sample(s)) 2928 collections in generation 0 ( 6.90s) 16 collections in generation 1 ( 12.20s) 65 Mb total memory in use most of this memory occupied by filenames. note that 28 mb of memory is used just for GC procedure (i use compacting GC) then, i thought that using pinned byte arrays should significantly improve memory usage because these arrays can't be moved around and therefore, i thought, these arrays will not be involved in GC. amount of data which should be compacted by GC will decrease and amount of memory wasted by GC should also decrease so i replaced in my packed str lib newByteArray# with newPinnedByteArray# and seen the following: 53,629,344 bytes maximum residency (14 sample(s)) 2904 collections in generation 0 ( 6.97s) 14 collections in generation 1 ( 13.16s) 100 Mb total memory in use why? why memory usage was increased? why another 47 megs is just wasted out? how GC works with pinned byte arrays? and why GC times was almost the same - i thought that GC for pinned data should be very different than GC for unpinned byte arrays -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com