* allocating memory for c-structures @ 2006-12-26 18:15 micha 2006-12-26 18:33 ` [Caml-list] " skaller 2006-12-26 18:35 ` Richard Jones 0 siblings, 2 replies; 4+ messages in thread From: micha @ 2006-12-26 18:15 UTC (permalink / raw) To: OCaml Mailing List Normaly I allocate memory for c-structures with malloc or with "new" for c++ objects. Some time ago a read about a library which places external structures in strings of the interfacing languages (it was a scheme lib I think). So instead of using malloc or new I would allocate an ocaml-string and put the c-structure there. So it will be free by the gc. That seems o.k. for me, any comments? I'm missing something? cheers Michael ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] allocating memory for c-structures 2006-12-26 18:15 allocating memory for c-structures micha @ 2006-12-26 18:33 ` skaller 2006-12-26 18:35 ` Richard Jones 1 sibling, 0 replies; 4+ messages in thread From: skaller @ 2006-12-26 18:33 UTC (permalink / raw) To: micha; +Cc: OCaml Mailing List On Tue, 2006-12-26 at 19:15 +0100, micha wrote: > Normaly I allocate memory for c-structures with malloc or with "new" for > c++ objects. Some time ago a read about a library which places external > structures in strings of the interfacing languages (it was a scheme lib > I think). So instead of using malloc or new I would allocate an > ocaml-string and put the c-structure there. So it will be free by the gc. > That seems o.k. for me, any comments? I'm missing something? I don't believe Ocaml guarantees the contents of a string will remain in a fixed location .. it might move the storage to a new address .. so pointers into the structure might dangle. -- John Skaller <skaller at users dot sf dot net> Felix, successor to C++: http://felix.sf.net ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] allocating memory for c-structures 2006-12-26 18:15 allocating memory for c-structures micha 2006-12-26 18:33 ` [Caml-list] " skaller @ 2006-12-26 18:35 ` Richard Jones 2006-12-26 18:55 ` micha 1 sibling, 1 reply; 4+ messages in thread From: Richard Jones @ 2006-12-26 18:35 UTC (permalink / raw) To: micha; +Cc: OCaml Mailing List On Tue, Dec 26, 2006 at 07:15:35PM +0100, micha wrote: > Normaly I allocate memory for c-structures with malloc or with "new" for > c++ objects. Some time ago a read about a library which places external > structures in strings of the interfacing languages (it was a scheme lib > I think). So instead of using malloc or new I would allocate an > ocaml-string and put the c-structure there. So it will be free by the gc. > That seems o.k. for me, any comments? I'm missing something? That seems like it'll work for "opaque" C objects, but it's a bit of a hack. The immediate issues I can think are: (a) Pointers in the C code which point at the object will not be "counted" by the GC, and so the object may be collected while there are still C pointers around. This is easily avoided in OCaml, but read chapter 18 of the manual carefully. (b) By storing the object as a string you're telling the GC not to examine the inside of the object, eg. looking for pointers inside to other objects. Fine, if you know what you're doing, but OCaml already has a number of established ways to do this - eg. using Abstract or Custom blocks - and these standard ways are not just standard, but offer additional features too. Alternatively you may consider a non-abstract block and deliberately allow the GC to look inside. C and OCaml structures are not actually too different. Actually, while I was writing the above, it struck me that perhaps you're talking about some sort of marshalling system? OCaml supports its own marshalling format, and a rich variety of other external forms of marshalling. Rich. -- Richard Jones, CTO Merjis Ltd. Merjis - web marketing and technology - http://merjis.com Internet Marketing and AdWords courses - http://merjis.com/courses - NEW! Merjis blog - http://blog.merjis.com - NEW! ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] allocating memory for c-structures 2006-12-26 18:35 ` Richard Jones @ 2006-12-26 18:55 ` micha 0 siblings, 0 replies; 4+ messages in thread From: micha @ 2006-12-26 18:55 UTC (permalink / raw) To: caml-list thanks for all the answers. Richard Jones schrieb: > > That seems like it'll work for "opaque" C objects, but it's a bit of a > hack. The immediate issues I can think are: > > (a) Pointers in the C code which point at the object will not be > "counted" by the GC, and so the object may be collected while there > are still C pointers around. This is easily avoided in OCaml, but > read chapter 18 of the manual carefully. > that's true; for linked data structures it would not work (except all would be allocated this way) > Actually, while I was writing the above, it struck me that perhaps > you're talking about some sort of marshalling system? OCaml supports > its own marshalling format, and a rich variety of other external forms > of marshalling. ah no, I just thought that it would be another way to handle external memory. What I didn't realize was, that the gc moves pointers around... cheers Michael ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-12-26 18:52 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2006-12-26 18:15 allocating memory for c-structures micha 2006-12-26 18:33 ` [Caml-list] " skaller 2006-12-26 18:35 ` Richard Jones 2006-12-26 18:55 ` micha
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox