Ho un problema con la sizeof di alcune classi del mio progetto, spero voi possiate darmi una mano :P

Ecco l'OUTPUT delle sizeof:
codice:
sizeof(fattura): 44 
sizeof(prodotti): 40 
sizeof(persone): 88 
sizeof(clienti): 100 
sizeof(vendite): 20 
sizeof(personale): 112
con i miei calcoli (semplice somma di dimensioni) le sizeof dovrebbero risultare leggermente diverse:
sizeof(fattura): 6+12+12+4+4+1=39
sizeof(prodotti): 6+25+4+4=39
sizeof(persone): 30+30+12+12=84
sizeof(clienti): PERSONE(quindi 88)+12=100 |OK|
sizeof(vendite): 6+6+4+4=20 |OK|
sizeof(personale): PERSONE(88)+17+4=109

A questo punto ho ipotizzato che le classi utilizzassero il modulo 4 per l'allocazione delle variabili ed ho ricalcolato in questo modo:

sizeof(fattura): |8|+12+12+4+4+1=41 |in realtà 44|
sizeof(prodotti): |8|+|28|+4+4=44 |in realtà 40|
sizeof(persone): |32|+|32|+12+12=88 |OK|
sizeof(clienti): PERSONE(quindi 88)+12=100 |OK|
sizeof(vendite): 6+6+4+4=20 |OK|
sizeof(personale): PERSONE(88)+|20|+4=112 |OK|

Quindi se il mio ragionamento è corretto a questo punto non capisco come calcolare le dimensioni errate...

Sperando che possiate aiutarmi, vi ringrazio in anticipo
PS:A seguire la dichiarazione delle classi.




codice:
class fattura
{
private:
	char id[6], partiva[12],data[12];
	float imptot,costivari;
	bool pagato;
public:
	//GET
	char* getid();
	char* getpartiva();
	float getimptot();
	bool getpagato();
	char* getdata();
	float getcostivari();
	//SET
	void setid(char*);
	void setpartiva(char*);
	void setimptot(float);
	void setdata(char*);
	void setpagato();
	void setcostivari(float);
	// COSTRUTTORE E DISTRUTTORE
	fattura();
	~fattura(){};

	//FUNZIONI FRIENDs
	friend	void insfatt();
	friend	void visualfatt(char*);
	friend	fattura ricfatt(char*);
	friend	void regpag(char*);
	friend	void resoconto(char*);
	friend  void stampa(char*);
	//OVERLOAD OPERATORE ESTRAZIONE BIT cout<<F equivale alla chiamata di operator<<(cout,F); 
	friend ostream& operator<< (ostream &out, fattura &F);


};
codice:
class prodotti{
private:
	char idprod[6], nome[25];
	float punit;
	int giacenza;

public:
	char* getidprod();
	char* getnome();
	float getpunit();
	int getgiac();
	void setidprod(char*);
	void setnome(char*);
	void setpunit(float);
	void setgiac(int);
	prodotti();
	prodotti(const prodotti& );
	~prodotti(){};

//FUNZIONI MAIN
friend	void insprod();
friend	void visualprod();
friend	int modprod(char*);
friend	bool acquisto(char*,int);
friend	bool modgiac(char*,int);
friend	prodotti ricprod(char*);
friend ostream& operator<< (ostream&, prodotti &);

};
codice:
class persone{
protected:
	char nomecognome[30],residenza[30], telefono[12], fax[12];
public:
	// CLASSE VIRTUALE PURA non è possibile inizializzare nessun oggetto
	// di questa classe
	virtual void visual()=0;
	virtual bool mod(char*)=0;
	virtual int ins()=0;

	char* getnomcogn();
	char* getresid();
	char* gettel();
	char* getfax();

	void setnomcogn(char*);
	void setresid(char*);
	void settel(char*);
	void setfax(char*);

	persone();
	~persone(){};
};
codice:
class clienti:public persone{
private:
	char piva[12];
public:
	char* getpiva();
	void setpiva(char*);
	clienti();
	clienti(const clienti&);
	~clienti(){};
// FUNZIONI VIRTUALI
	int ins(); //restituisce -1 in caso di errore, 0 se si è svolta correttamente la funzione
	void visual();
	bool mod(char*); //restituisce 0 se non ha trovato riscontri di partita iva, 1 se ha modificato un prodotto
// FUNZIONI FRIEND
	friend	clienti riccli(char*); //restituisce l'elemento ricercato nei clienti
	friend ostream& operator<< (ostream&, clienti&); //utilizza lo stream di output equivale a richiamare operator<<(cout,C);

};
codice:
class vendite{
private:
	char idf[6], idp[6];
	int quant, aliq;
	

public:
	char* getidf();
	char* getidp();
	int getquant();
	int getaliq();
	void setidp(char*);
	void setidf(char*);
	void setquant(int);
	void setaliq(int);	
	vendite();
	~vendite(){};

	void insvend(char*,char*,int,int);
	void visualvend(char*);
	

};
codice:
class personale:public persone{
private:
	char codfisc[17];
	float stipendio;
public:
	char* getcontr();
	char* getcodfisc();
	float getstipendio();
	void setcontr(char*);
	void setcodfisc(char*);
	void setstipendio(float);
	personale();
	~personale(){};

	//FUNZIONI VIRTUALI
	int ins(); //-1 in caso di errore, altrimenti restituisce 0
	void visual();
	bool mod(char*); //0 se non modifica e quindi non trova riscontri di codicefiscale, 1 se viene eseguita la modifica
	//FUNZIONI FRIENDs
	friend	personale ricpers(char*);
		//OVER. OPERATORE
	friend ostream& operator<< (ostream&, personale&);

};