[geos-devel] JTS/GEOS performance - smart-ptr vs ref counting
Martin Davis
mbdavis at VividSolutions.com
Mon Jan 31 19:45:27 EST 2005
It's just occurred to me that a classic issue with ref-counting is being
able to handle self-referential data structures. Some of the data
structures in JTS/GEOS are inherently self-referential (e.g. topology
graphs). Is there a standard pattern for coping with this kind of
problem?
Failing this, might it be better to look at a garbage-collected
approach?
Martin Davis, Senior Technical Architect
Vivid Solutions Inc. www.vividsolutions.com
Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046
> -----Original Message-----
> From: Martin Davis
> Sent: January 31, 2005 4:35 PM
> To: GEOS Development List
> Subject: RE: [geos-devel] JTS/GEOS performance - smart-ptr vs
> ref counting
>
>
> That was pretty much my point - smart pointers alone don't
> produce memory efficiency, they just make the code safer (and
> hopefully easier).
>
> Martin Davis, Senior Technical Architect
> Vivid Solutions Inc. www.vividsolutions.com
> Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
> Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046
>
>
> > -----Original Message-----
> > From: Chapman, Martin [mailto:MChapman at sanz.com]
> > Sent: January 31, 2005 4:18 PM
> > To: GEOS Development List
> > Subject: RE: [geos-devel] JTS/GEOS performance
> >
> >
> > Martin,
> >
> > Smart pointers are one thing and ref-counting (garbage
> > collection) are two different but related things.
> >
> > Smart pointers help prevent memory leaks. A smart pointer is
> > always created on the stack, when the function ends they
> > always go out of scope and their destructors delete their
> > encapsulated pointer...therefore, if all heap data is wrapped
> > by a smart pointer, if the function crashes you are
> > guaranteed that the heap memory will be de-allocated because
> > the smart pointer will always be destroyed and will call it's
> > destructor. This actually means more vars on the stack, but
> > less chance for mem-leaks.
> >
> > Ref-counting allows multiple objects to share pointers to the
> > same object without the fear of some other object deleting
> > that object before you are done using it, and allows you to
> > safely pass heap data across function boundaries. This can
> > save huge amounts of memory and debugging. For example...if
> > you have a million geoms that all have a pointer to the same
> > spatial reference class then you only need one SRS class
> > versus a million of them. The SRS class refcount will be a
> > million and is guaranteed to be around until the last geom
> > decrements the ref count to zero. Also, this way you can
> > easily and quickly change a prop on the SRS class that is
> > immediately available to all million geoms. You can also,
> > easily re-assign the SRS of an individual geom without
> > disrupting the other 999,999 geoms.
> >
> > So the short answer is, an enterprise api should have both
> > smart pointers and ref-counting available as an option.
> >
> > The email I just sent before this one has code examples of a
> > smart-pointer template class that does both. It's based
> > after MS COM's CComPtr<> class, but is ansi and will run
> > cross platform. It's small, light-weight, polymorphic and
> > works great. Geos definitely needs this, but it's not going
> > to make your app faster, just more memory efficient...and you
> > won't have to be calling "delete" all over the place anymore.
> >
> > Increasing speed is all about looping and
> > allocating/de-allocating in your app. The more times you
> > loop through coords and alloc/dealloc you are consuming lots
> > of clock cycles. Think about what it takes to alloc 20
> > classes for each loop in a million features...if you look at
> > the disassembler you would be amazed.
> >
> > Martin
> >
> >
> > -----Original Message-----
> > From: Martin Davis [mailto:mbdavis at VividSolutions.com]
> > Sent: Monday, January 31, 2005 3:50 PM
> > To: GEOS Development List
> > Subject: RE: [geos-devel] JTS/GEOS performance
> >
> >
> > I can see how smart pointers can help with program
> > correctness. Do they help with performance?
> >
> > Martin Davis, Senior Technical Architect
> > Vivid Solutions Inc. www.vividsolutions.com
> > Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
> > Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046
> >
> >
> > > -----Original Message-----
> > > From: Norman Vine [mailto:nhv at cape.com]
> > > Sent: January 31, 2005 11:31 AM
> > > To: GEOS Development List
> > > Subject: RE: [geos-devel] JTS/GEOS performance
> > >
> > >
> > > Martin Davis writes:
> > > >
> > > > Hmmm. This seems fundamentally the wrong approach. JTS
> > > does not need
> > > > the flexibility of linked lists inside CoordinateSequences.
> > > It sounds
> > > > like you are trying to build a garbage-collected memory
> > management
> > > > layer. This may be the only reasonable solution.
> > However, rather
> > > > than hacking this into the existing code in an obtrusive
> > > kind of way,
> > > > it would be nicer to look for a clean, layered solution.
> > Are there
> > > > any open source GC packages for C++?
> > >
> > > There are several quality OpenSource C++ Memory Managers
> > but ... This
> > > is *exactly* the kind of thing that smart_pointers have
> > made sort of
> > > obsolete :-)
> > >
> > http://boost.org/libs/smart_ptr/smart_ptr.htm
> >
> > Norman
> > _______________________________________________
> > geos-devel mailing list
> > geos-devel at geos.refractions.net
> > http://geos.refractions.net/mailman/listinfo/geos-devel
> >
> > _______________________________________________
> > geos-devel mailing list
> > geos-devel at geos.refractions.net
> > http://geos.refractions.net/mailman/listinfo/geos-devel
> >
> > _______________________________________________
> > geos-devel mailing list
> > geos-devel at geos.refractions.net
> > http://geos.refractions.net/mailman/listinfo/geos-devel
> >
> _______________________________________________
> geos-devel mailing list
> geos-devel at geos.refractions.net
> http://geos.refractions.net/mailman/listinfo/geos-devel
>
More information about the geos-devel
mailing list