[PD-dev] string external & usage count

joerg piringer joerg at piringer.net
Thu Oct 14 14:48:27 CEST 2004


Bryan Jurish wrote:
> moin Joerg, moin Tim, moin List,
> 
> just some thoughts:
> 
> On 13 October 2004 at 16:43:36, joerg piringer appears to have written:
>  > i don't want to use pointers because if i send an invalid pointer to one 
>  > of my string objects it will most likely crash pd.
> 
> ... but that's basically what you're doing now (with additional
> reference counting), or did I misunderstand?

no, i have an array with indexes. each string handle is an index in my 
array.

>  > therefore i use handles. the worst thing that can happen is that a wrong 
>  > handle refers to the wrong string. i made tests with wrong handles and 
>  > it is quite fail safe.
> 
> ... or are you actually adding another table-lookup: it ought to
> be straightforward enough to use literal pointer values (maybe as
> Tim suggested by (ab)using w_symbol.s_name) and just keep an ID-hash
> of "valid" ones around, pointing to their reference counts.  But
> if you go this route, you're doing some extra computation anyways...

i am using (at the moment) a fixed array of pointers to stringobjects 
that can be allocated. each handle is an index of one of these 
stringobjects. when i free a stringobject the handle is stored in a 
free-handle-list. so new allocations are made for these second hand 
handles first.

>  > i also don't want to use lists because my string class is based on 
>  > cstring (because it shares code with a "text-processor" program i am 
>  > writing for my pda) and so i'd have to do a lot of converting between 
>  > list and string and back again just to do one operation. that cannot be 
>  > effective.
> 
> it's a bit of processing overhead, that's certainly true; and
> my existing message<->list conversion routines are pretty ugly at
> the moment (lots of unnecessary re-allocation), but I haven't
> noticed them slowing me down, even in pretty hefty usage ... of
> course, I deal mostly with many rapidly changing short strings
> (English words), and if you're dealing with large chunks of data,
> your mileage may vary...

i am dealing with large strings, that's why i want to keep things fast.

>  > i also don't know how pd handles lists, does it copy a list when i 
>  > connect two objects to one outlet? or reference counting?
> 
> none of the above, as far as i know: my impression has always
> been (at least, since some previous hypotheses caused segfaults
> ;-) that the "originator" (to borrow a term from Frank) of
> a multi-atom message (i.e. a list) is responsible for
> allocating and maintaining the memory associated with that
> list, which can be safely freed when the object itself
> disappears.  So basically, whenever message data gets changed
> by passing through an object, the object should copy that
> data into a local buffer, and pass the (modified) local
> copy back out -- again probably not what you want
> if you're dealing with large chunks of shared data: maybe
> pdp would be the way to go in that case.

pdp: no, i am using evil winxp.

i think my concept works quite well. i will experiment a little bit more...

best
joerg

-- 
http://joerg.piringer.net
http://www.transacoustic-research.com
http://www.iftaf.org
http://www.vegetableorchester.org





More information about the Pd-dev mailing list