[gambit-list] Allocate Scheme vector before or after C call?
Lassi Kortela
lassi at lassi.io
Sat Jul 18 09:14:42 EDT 2020
Which of the following is the better strategy for calling C functions
that fill a pre-allocated buffer but might fail?
Option 1. First malloc() a temporary buffer in C, call the desired C
function to fill that buffer, and if the C function succeeds then
allocate a Scheme string/vector of the same size as the temp buffer and
copy the temp buffer into it. If the C function fails, free() the temp
buffer and return an error value to Scheme.
Option 2. First allocate a Scheme string/vector of the right size, then
call the desired C function to fill it directly. No temporary buffer is
used. If the C function fails, free the Scheme object. (Which function
in the Gambit FFI does this?)
Does GC present complexities for option 2 (especially when interacting
threads and/or signals)?
More information about the Gambit-list
mailing list