If you are not working in memory constrained environment, then organize your members in a logical way - by their responsibilitis, to make it easier to work with. Currently your members have miningless names, so its hard to suggest anything.
If you want to analyze how compiler layouts your structures/classes, you may use tools like /d1reportAllClassLayout
(undocumented) compiler parameter in Visual Studio. For your classes it outputs:
1>class foo size(8):
1> +---
1> 0 | data0
1> | <alignment member> (size=2)
1> 4 | data1
1> +---
1>class bar size(20):
1> +---
1> 0 | data0
1> 4 | data1
1> | <alignment member> (size=3)
1> 8 | data2
1>12 | foo data3
1> +---
so it looks like 5 bytes are lost due to alignment, you could add additional members in alignment places and it would not require additional memory.