From: Dirk R. <dir...@gm...> - 2006-05-19 07:54:47
|
Hi Allen, Allen Bierbaum wrote: > > Maybe I didn't ask this right. What I was wondering is are you really ta= lking about having a class called say Node that contains pointers to classe= s of type Node (which would then itself have a list of pointers to classes = of type Node and so on). My idea was to share the aspect pointers between aspects, to simplify synchronisation. Even though, thinking about it, they are probably going to be static anyway, but even then sharing makes sense to reduce overhead. So it will be more like template <class fc> struct FCPAspects { int _naspects; fc *_ptrs[_naspects]; }; class FooFC { ... private: FCPAspects<FooFC> *_aspects; }; > Is it a "really bad idea" because of the performance overhead of modifyin= g the ref count? > > I haven't analyzed how often OpenSG does this but from what I have seen w= ith boost::shared_ptr's the overhead seems very low. For example see: http= ://www.boost.org/libs/smart_ptr/smarttests.htm > > It does have overhead though, so if there are thousands of copies per fra= me I could see where it would add up (in things like the actions and render= calls). Given that this would be incurred for each pointer passed as a parameter, I'd be except a couple thousands of them per frame, maybe close to 100000. The actual refcount manipulation is not the problem, but the locking of the refcount is. I can't get to the page right now, so I don't know if they used a thread-safe version for the tests. But in general I would really like to avoid that kind of overhead. Yours Dirk |