Contents Up << >>
What are relative costs of the 3x performance hits associated with allocating member objects from the freestore?
The three performance hits are enumerated in the previous FAQ:
- By itself, an extra layer of indirection is small potatoes.
- Freestore allocations can be a performance issue (the performance
of the typical implementation of malloc degrades when there are many
allocations; OO s/w can easily become "freestore bound" unless you're careful).
- The extra dynamic binding comes from having a ptr rather than an
object. Whenever the C++ compiler can know an object's exact class, virtual
fn calls can be statically bound, which allows inlining. Inlining
allows zillions (would you believe half a dozen :-) optimization
opportunities such as procedural integration, register lifetime issues, etc. The
C++ compiler can know an object's exact class in three circumstances:
local variables, global/static variables, and fully-contained member
objects.
Thus fully-contained member objects allow significant optimizations that
wouldn't be possible under the "member objects-by-ptr" approach. This
is the
main reason that languages which enforce reference-semantics have
"inherent"
performance challenges.
NOTE: PLEASE READ THE NEXT THREE FAQs TO GET A BALANCED
PERSPECTIVE!