&gt; The performance win, on modern platforms, comes chiefly from reducing the number of (unpredictable&#x2F;non-cached) pointer dereferences.<p>The parenthetical is important. Pointers are just fine as long as you don&#x27;t dereference them and suffer cache misses as a result.<p>It&#x27;s also worthwhile to note that what you described is not always a worthwhile optimization, even if you can do it. If, for example, you traverse an array of the objects containing a sub-object frequently and follow the pointer to that object only rarely, it&#x27;s often worthwhile to allocate it separately to improve cache locality of that traversal. This is even more important if you&#x27;re doing a lot of structure copies of the outer structure; avoiding copying more bits saves a lot of time. The latter case comes up surprisingly often in my experience, and I&#x27;ve improved performance of code quite a few times with separate allocations and pointer indirection.