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?)

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.

Any thoughts?

Cheers,
Greg

On Nov 11, 2009, at 1:18 PM, Don Stewart wrote:

gcross:
Hey everyone! Do you have any suggestions for how I might allocate an aligned block of memory that I can pin while making foreign calls, but
leave unpinned the rest of the time to potentially improve allocation
and garbage collector performance?  Or is this even a good idea?

There's no pinned/unpinned memory. You have to pick one.

 * Use a ForeignPtr to allocate pinned memory (mallocForeignPtr)

if you want it mostly poinned. Otherwise, you'll need to copy from
unpinned to pinned.


-- Don

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to