On 13/07/2010 05:49, Evan Laforge wrote:
On Mon, Jul 12, 2010 at 6:54 PM, John Meacham<j...@repetae.net>  wrote:
Hi, is a StablePtr what you are after?

Indeed, it looks like StablePtr will get me what I want.  It's a
little less convenient than FunPtr because I'm already doing some
finalization of FunPtrs and I can reuse the same callback, but it
looks like it's specifically documented to do what I want, which is
reassuring.

In any case, memcpy still wins out on simplicity.  If I ever need to
pass a pointer larger than 32mb and have both haskell and C manage the
memory, I'll look into StablePtr.

FYI, when you call a foreign import "wrapper" to make a FunPtr, a StablePtr gets created behind the scenes to point to the closure representing the function in Haskell, and freeHaskellFunctionPtr calls freeStablePtr on that StablePtr.

Rougly speaking, ForeignPtrs are pointers from Haskell to C, and StablePtrs are pointers from C to Haskell. However, we realised that we could optimise the case of a ForeignPtr allocated in Haskell by using heap-allocated memory and replacing the finalizer with the GC, which is what mallocForeignPtr does.

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to