[redland-dev] implicit free
Maxence Guesdon
Maxence.Guesdon at inria.fr
Fri Nov 25 15:16:48 CET 2011
On Fri, 25 Nov 2011 13:51:55 +0000
Norman Gray <norman at astro.gla.ac.uk> wrote:
>
> Maxence, hello.
>
> On 25 Nov 2011, at 13:04, Maxence Guesdon wrote:
>
> > Thanks for your explanation. If I understand correctly:
> > - there is smal additional cost (memory and cpu) due to copying,
>
> Well yes, but no more than would be expected anyway in normal operation. A GC-based implementation would have object creating and copying being very cheap anyway.
>
> > - sharing is prevented.
>
> I'm not sure what you mean here. When the wrapper layer copies a librdf object it's done via a librdf function call, as Lauri mentioned. In many cases this will be implemented by incrementing a librdf-internal reference count, which means very little cost; and this wouldn't prevent sharing.
Sorry, but something remains not clear for me. In your previous message,
you said that
> These structs are therefore conceptually 'owned' by the Racket layer, so where the librdf documentation notes that a returned object is shared, I make a copy of it using one of the librdf copy-create functions.
That is:
- when you retrieve an already existing object (with a foo_get... function for
example), you make a copy and make the gc call the free function on this
copy when the value is no more reachabe,
- when you create an object, you don't make a copy, but you just embed it
in a racket value.
Is this correct ?
Is so, that's the way I began to before being afraid of freeing objects
still in use. I wasn't aware of the counter already used internally.
> The problem I mentioned in the other message came about because one of these librdf copy operations was accidentally a shallow copy rather than a deep one, and if I recall correctly may have been only a documentation bug.
This I understand.
Thanks again,
Maxence
More information about the redland-dev
mailing list