The reason is byte packing. The i386 and later processors can access memory that is aligned or unaligned to specific boundaries. For byte size operations, any address is as good as another (not quite true, but its handled inside the processor). For word size (16 bit) operations, accesses are faster on 16 bit aligned addresses (every 2 bytes). For DWORD and pointer size operations, accesses are faster on 32 bit aligned addresses (every 4 bytes). Since your structure has a 4 byte sized object (the unsigned int) following the char it has been aligned to the next optimal address. If you really don't like this you can instruct the compiler how you want it to behave using the #pragma pack directive. Stephen Kellett