Dear All: I am writing a program that include a main loop written in Ocaml and a sub-module written in C. The main loop called the sub-module a lot, and a huge array is returned from each call.
So I use the standard C-Caml interface to return these huge data as shown below: extern "C" value minisat_save_proof(value unit) { CAMLparam0(); CAMLlocal1( ml_data ); vec<long>& vi=(solver->proof)->save("minisat_save_proof"); int sz=vi.size(); ml_data = caml_alloc (sz,0); for (int i=0;i<sz;i++) { Store_field( ml_data, i, Val_int((int)(vi[i])) ); } CAMLreturn( ml_data ); } In the main ocaml program loop, there is a call to a ocaml method A, which again call this C method minisat_save_proof. When ocaml method A got these data returned from minisat_save_proof, it call another method B to clear all data structure in the sub-module written in C, and then exit to the main loop and call Gc.compress to collect all garbage. So in this case I think the memory usage of my program should be the same like before calling minisat_save_proof , because the returned data should be collected by the garbage collector when exiting the method A to the main loop. But from the unix "top" command, I find that these huge return data seems to remain in memory and consume all my memory step by step. So I want to know if there is any method to free these data? -- Caml-list mailing list. Subscription management and archives: https://sympa-roc.inria.fr/wws/info/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs