On 21/08/2014 12:12, Joaquin M Lopez Munoz wrote:
Some months ago I explored a container-like construct for polymorphic objects that group elements by run-time type so as to greatly speed up for_each processing:
http://bannalia.blogspot.com.es/2014/05/fast-polymorphic-collections.html
IMHO you're comparing oranges and apples, the memory layout and traversal properties are entirely different. Your structure has a varying number of elements, all of different sizes, which isn't directly compatible with the memory representation of a vector and therefore requires indirection and fragmentation (unique_ptr). If you want to do a more fair comparison, it would be interesting to try to keep the same memory layout but just in a different order, for example using instruvie linked lists, to see whether it is indeed the branch prediction of the vtable that gives you those benefits.