[Haskell-cafe] Question about touchForeignPtr

Patrick Perry patperry at stanford.edu
Mon Jan 12 14:16:21 EST 2009


Thanks for your help, Duncan.

On Jan 12, 2009, at 6:10 AM, Duncan Coutts wrote:

>> Do the (ForeignPtr e) and the (Ptr e) point to the same thing? They
> appear to be related because you dereference p but touch f.
>
> It used to be the ForeignPtr was slower to dereference than a Ptr  
> and so
> caching it like this could make it faster (but then requires lots of
> careful thought about touchForeignPtr). These days ForeignPtr is  
> just as
> fast and so you can use withForeignPtr and never have to worry about
> touchForeignPtr. You'll notice ByteString works this way.

Often they point to the same thing, but not always.  If they pointed to
the same thing, I wouldn't store p separately, but often p has a nonzero
offset from f.  You either have to store the offset or cache the  
pointer.
I found that it was both faster and simpler to cache p rather than the
offset.


Patrick


More information about the Haskell-Cafe mailing list