It may have everything to do with keeping VTables on 4-byte boundaries. Since VTables will resolve into pointers to functions in derived classes, they want to keep them aligned so the performance on the CPU is better. As an experiment, you can try changing public: int b; base() into public: byte b; base() And you will still probably get 12. Then try public: int b; int c; base() And you might still get 12. I think it has do do with optimizing pointers to tables of function pointers, myself.