Thank you On Sat, Jul 10, 2021 at 5:28 PM Thomas Chust <thomas.ch...@gmail.com> wrote:
> Am Sa., 10. Juli 2021 um 15:15 Uhr schrieb Aydar Zarifullin < > aydar...@gmail.com>: > >> Hello everyone, I have a few questions: Is it safe to pass a blob >> created in scheme to C functions? Will the garbage collector move it in >> memory? Is there any guarantee that the garbage collector won't move it in >> the middle of a C function? Is the situation the same with bytevectors? >> > > Hello Aydar, > > the answer to each of these questions is "yes", I believe ☺ > > To pass the contents of a non-immediate Scheme object to to a C function > through the FFI, use the type [nonnull-]scheme-pointer. Unless it is a > SRFI-4 vector you want to pass, in that case you need to use a type > specific for the vector type in question. > > Since CHICKEN is essentially single-threaded, as far as the operating > system is concerned, once you pass control to a C function through the FFI, > no Scheme code or CHICKEN support code is running in the background, hence > a pointer to the inside of a scheme object stays stable during *one* > foreign function call, but not necessarily *across multiple* foreign > function calls. So the long answer to your first question is really that it > depends on what the C function is doing with the pointer: If the function > accesses something at the pointer address and then returns, all is well. If > the pointer is remembered somewhere and used later on during another > foreign function call, that is not safe. > > Ciao, > Thomas > > -- > When C++ is your hammer, every problem looks like your thumb. >