The price you pay for this level of compression is the loss of locality of reference. Yes you fit all the data for your struct fields in the minimum amount of memory, but every field for a single object is going to live on a different cache line. This might be OK if you are only ever doing something to a single field at a time, but it might hurt if you are reading many fields of an object at once.