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