Derrick Stolee <stolee@xxxxxxxxx> writes: > +struct packed_oid_list { > + struct object_id **list; > + int nr; > + int alloc; > +}; What is the typical access pattern for this data structure? If it is pretty much "allocate and grow as we find more", then a dynamic array of struct (rather than a dynamic array of pointers to struct) would be a lot more appropriate. IOW struct packed_oid_list { struct object_id *list; int nr, alloc; }; The version in the posted patch has to pay malloc overhead plus an extra pointer for each object id in the list; unless you often replace elements in the list randomly and/or you borrow object ID field in other existing data structure whose lifetime is longer than this list by pointing at it, I do not see how the extra indirection is worth it.