FFI calls: is it possible to allocate a small memory block on a
stack?
Denys Rtveliashvili
rtvd at mac.com
Sun Apr 18 05:28:24 EDT 2010
> While alloca is not as cheap as, say, C's alloca, you should find that
> it is much quicker than C's malloc. I'm sure there's room for
> optimisation if it's critical for you. There may well be low-hanging
> fruit: take a look at the Core for alloca.
Thank you, Simon.
Indeed, there is a low-hanging fruit.
"alloca"'s type is "Storable a => (Ptr a -> IO b) -> IO b" and it is not
inlined even though the function is small. And calls to functions of
such signature are expensive (I suppose that's because of look-up into
typeclass dictionary). However, when I added an "INLINE" pragma for the
function into Foreign.Marshal.Alloc the time of execution dropped from
40 to 20 nanoseconds. I guess the same effect will take place if other
similar functions get marked with "INLINE".
Is there a reason why we do not want small FFI-related functions with
typeclass arguments be marked with "INLINE" pragma and gain a
performance improvement?
The only reason that comes to my mind is the size of code, but actually
the resulting code looks very small and neat.
With kind regards,
Denys Rtveliashvili
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20100418/6e7d3ad0/attachment.html
More information about the Glasgow-haskell-users
mailing list