[Haskell-cafe] Sometimes pinned memory?

Don Stewart dons at galois.com
Wed Nov 11 16:35:19 EST 2009

> Thanks, Don.  What made me think that this might be possible was the  
> existence of Foreign.StablePtr, since that seems to take a Haskell  
> expression and pin it down.  Could this mechanism be harness to pin down 
> arrays, or am I misunderstanding how it works? (Is StablePtr really just 
> making a copy of the expression behind the scenes?)

That doesn't make the memory actually stable, it just keeps a dynamic
association between a stable pointer and the actual memory address, so
you can look up where a block of memory has moved to, keying only with a
pointer-sized value.
> My motivation for this is that I will be sweeping back and forth along a 
> data structure that is chain of memory blocks (essentially a pointed  
> list), with ~ 10 to 1000 beads.  At any given time I am only working  
> with and updating one bead on the chain, so I am wondering if trying to 
> use unpinned memory for the beads not in use would help by speeding up 
> allocations and allowing the g.c. to rearrange their layout in memory.  
> Each bead has a few memory chunks ranging from ~ 100 bytes to possibly up 
> to tens of kilobytes, depending on a scaling parameter on my algorithm.

If there are many small chunks, unpinned memory is better. Might be ok
to copy into pinned memory for the foreign call.

-- Don

More information about the Haskell-Cafe mailing list