Suppose you are reading a list of structures, and you do not know in 
advance how many there will be.  I'm trying to figure out when it's better 
to append them to a slice of structures, and when it's better to append 
pointers to them to a slice of pointers.  It's easy enough to to the math 
on how many allocations are done, how much data is copied, etc. But what I 
don't know is how to gauge the tradeoff between allocations and data 
copies.  How much extra data copying is it worth accepting in order to do 
fewer allocations?

A couple of examples.  Suppose my structure size is 128 bytes, and it turns 
out I read 32 of them.  That's 4kB of raw data.
     read into []struct{}:  6 allocations totalling 8064 bytes, with 7296 
bytes of data copies
     read into []*struct{}:  69 allocations totalling 8568 bytes, with 248 
bytes of pointer copies
So, how does 7kB more data copies balance with 73 more allocations?  Is one 
clearly better than the other?

Or suppose a 32 byte structure, and it turns out I read 128 of them. 
 Again, 4kB of raw data.
     read into []struct{}:  8 allocations totalling 8169 bytes, with 7904 
bytes of data copies
     read into []*struct{}: 263 allocations totalling 10,200 bytes, with 
1016 bytes of pointer copies
How does 250 more allocations balance with 7kB more copies?

Of course it would be nice to answer these questions by benchmarking, but 
the problem tends to be embedded in highly complex systems that defy 
deterministic benchmarking.  So all I'm really looking for is the gut feel 
of those Go experts who have focused on these sort of optimizations in the 
past.  Thanks in advance...

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to