Aha ... you've hit on something called 'Data alignment'.
Basically, on modern computers, data is faster to access in certain positions. A normal CPU works in 32-bit mode (4 bytes) so data on 4-byte boundaries is quicker to access...
Example: Addresses 0, 4, 8, 12 .... are quicker to access than 1, 3, 5, ....
In fact, sometimes 8 byte boundaries are even quicker than 4 byte boundaries.
In order to make use of this fact compilers often 'pad out' data so each variable rests on a 4-byte boundary (or some other boundary...odd numbered addresses are the worst of all). This often leads to records size's being multiples of 4 or 8 ... if they should be less than that, then the compiler just adds 'padding' (wasted space) to MAKE them that big. Result: faster code. Problem: You've just discovered it!
In Delphi, you can mark a record as 'packed' to force it NOT to use padding. That's exactly what you do for file structures

C++ does let you do that somehow, but I remember being told the method in question varies from compiler to compiler. So start hunting through your docs
