PDA

Visualizza la versione completa : [C++] Dimensione di una classe


alabasta
09-03-2010, 16:52
Salve a tutti ho un problema con la dimensione della classe in questione


class distrVehicle{
public:
distrVehicle()
{
cout << "Inizializzazione Vehicle\n";
}

~distrVehicle()
{
cout << "Distruzione Vehicle\n";
}

double updateVELOCITY;
bool dream;
bool obstacle;
int mHealth;
int mAttack;
int mUpdateVelocity;
//char* vehicleBlockPosition;
double m_dTimeElapsed;
double mAcceleration;
//distributedSteeringBehaviour steering;
//std::vector<Vector2D> m_vecVehicleVB;

//Moving Entity
Vector2D m_vVelocity;
Vector2D m_vHeading;
Vector2D m_vSide;
double m_dMass;
double m_dMaxSpeed;
double m_dMaxForce;
double m_dMaxTurnRate;

//Game Base Entity
int m_ID;
int m_EntityType;
bool m_bTag;
bool mLeader;
int mTeam;
int mBattalion;
double m_dBoundingRadius;
Vector2D m_vPos;
Vector2D m_vScale;

void fillVehicle(){

m_dBoundingRadius = 43.65f;
m_vPos = Vector2D(32,43);
m_vScale = Vector2D(32,43);

}

};


Quando faccio sizeof(distrVehicle) il suo valore di 184 byte, invece facendo la somma delle singole variabili io mi trovo 180 la differenza diventa maggiore se aggiungo anche una variabile char*... infatti sizeof(char*) occupa 4 byte invece nel computo generale risultano essere 8...
sizeof(int) = 4
sizeof(double) = 8
sizeof(Vector2d) = 16
sizeof(bool) = 1
Il tutto molto strano mi serve avere una misura specifica... perch devo inviare l array di byte sulla rete....
Grazie a tutti...

MacApp
09-03-2010, 17:13
http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_st ructs_on_x86

Considera che l'allineamento dei campi pu spesso essere cambiato tramite opportune direttive di compilazione o pragma che dipendono dal compilatore in uso.

alabasta
09-03-2010, 17:26
grazie

oregon
09-03-2010, 20:40
Cosa usi per compilare?

alabasta
10-03-2010, 10:53
Sto programmando con visual studio 2008...

oregon
10-03-2010, 11:02
Progetto Win32 (Console, GUI) ? In questo caso prova ad inserire all'inizio del codice

#pragma pack(1)

Loading