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

Reply via email to