What are relative costs of the 3 performance hits of allocated subobjects?
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 • 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