Thanks for your reply, Rabih.

2007/5/31, RABIH.ELCHAAR@sgam.com <RABIH.ELCHAAR@sgam.com>:

I did a wrapping of the levmar library.


Unfortunately, since I am to use this in a commercial product, and I was not able (yet ?) to convince my boss to release the sources, I can't use with levmar, wich is GPLed... I may switch to cminpack. But i think this is not related to my current question.

The approach I chose is to allocate bigarrays from Caml, and pass them to the main C function, along with the function f.

Does it mean that each time f function is called by the minimization, the C wrappers has to copy the params C array into your Bigarray pre-allocated storage place? That's why I choosed to leave the C array untouched and wrap a Bigarray around it  (should not be a big amount of memory). Am I wrong in going this way?

In the main function, I register f and all the bigarrays as global roots, and then call as many times the c sub function to compute the minimization.

I do not understand this part. f is passed to the main (C) function from OCaml: why do you need to register it as a global root? Same question for the Bigarrays? Does it mean that else, nothing in OCaml world would point to them?  

Feel free to ask for more precisions if needed

Hope this helps.

Surely. I really need to acquire a better understanding of GC and C interface in OCaml.
Really, I do not understand what happens to those C allocated Bigarrays...

Salutations

Matthieu