Try 2 pointers and an int. One of those pointers is a reference to the class and the integer holds the reference count for the object, which you'd expect if you're using reference count based memory management and virtual methods.
The other pointer can point to a GData structure that will be allocated if you use various GObject features (e.g. weak references).
I won't deny that it adds some memory overhead over a bare structure, but it is for features people generally use.