Browse thread
Documentation request: allocation of bigarrays in C
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2006-04-02 (14:05) |
From: | Dmitry Bely <dbely@m...> |
Subject: | Re: [Caml-list] Documentation request: allocation of bigarrays in C |
Li-Thiao-Té Sébastien <sayan@crans.org> writes: >>>If you want to be GC-friendly, use the bigarray >>>allocation macros with a NULL pointer to allocate memory then get a >>>pointer to the data array. >> If you need GC-controlled bigarray, why simply not to use >> Bigarray.Genarray.create? >> > Why is there a C bigarray allocation function at all then ? :) alloc_bigarray_xxx()? Their primary purpose is to allocate a proxy structure for an external C-allocated data (that cannot be finalized). data==NULL behaviour IMHO is not for the final user but only for Bigarray.Genarray.create internal use. > In my case, I want to read a relatively big file (50MB) containing > arrays of floats . I use C functions for the raw speed then pass the > bigarrays to OCaml to do some reordering of the data, and higher-level > processing. You should use Bigarray.Genarray.create then pass the created bigarray to C side using Data_bigarray_val(). Note that the bigarray is allocated with malloc() outside the Ocaml heap. > I do not open the file in Ocaml then send a string to C for parsing, > but rather open the file in C and return the bigarray list to > Ocaml. (cf my previous mistake on creating Ocaml lists in C on this > mailing-list) > > I have hundreds of such files that I may want to load and compare > interactively, so reclaiming unused memory is a big bonus. Sure - Ocaml-allocated bigarrays will be finalized as usual. - Dmitry Bely