begin process at 2012 05 30 09:51:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

sizeof d'un classe en C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sizeof d'un classe en C++

mercredi 3 février 2010 à 09:16:48 | sizeof d'un classe en C++

MahaYassine

Bonjour,

J'ai un problème avec le C++ sous Solaris. Au fait j'essaye de faire un sizeOf d'une classe mais ça me retourne pas la taille exacte. Le résultat c'est un nombre mutliple de 8. Cela est dû au fait que le compilateur sous Solaris impose un alignement de 8 dans lors réservation de la mémoire.
Exemlpe :

#include <iostream>

class A
{
public:

char ch[13];
int nb;
char c1;
char c2;
A(){}//constructeur

};

int main()
{
std::cout<<sizeof(A)<<std::endl;
return 0;
}


Le résultat obtenu est 24 à la place de 19

Y a t-il une solution pour rendre cet alignement à 1 ou une autre alternative à part l'utilisation du sizeOf ?!! Sachant que mettre #pragma pack(1) n'a pas d'effet sur les classes.

Merci !!
mercredi 3 février 2010 à 10:15:51 | Re : sizeof d'un classe en C++

fregolo52

Membre Club
salut,

pourquoi 19 ?
A(){}//constructeur, ça a aussi une taille !!!!
mercredi 3 février 2010 à 10:56:04 | Re : sizeof d'un classe en C++

MahaYassine

Ah oui désolé 19 c'est sans le constructeur, j'ai complètement oublié que je l'ai ajouté après !!

#include <iostream>

class A
{
public:

char ch[13];
int nb;
char c1;
char c2;

};

int main()
{
std::cout<<sizeof(A)<<std::endl;
return 0;
}


Le résultat obtenu est 24 à la place de 19
mercredi 3 février 2010 à 11:10:13 | Re : sizeof d'un classe en C++

fregolo52

Membre Club
je ne sais pas quelle est la différence entre une classe et une structure dans ce cas précis.

As-tu déplacé le int (en 1er ou en dernier) pour voir si ca fait toujours 24 ?
mercredi 3 février 2010 à 11:19:03 | Re : sizeof d'un classe en C++

MahaYassine

Oui j'ai déplacé le int au début et j'ai même essayer d'autres combinaisons. Et au meilleur des cas j'ai obtenu 20 mais pas 19. Avec les classes contenant des constructeurs ou qui héritent d'autres classes le #pragma pack(1) ne fonctionne pas !!
mercredi 3 février 2010 à 15:00:48 | Re : sizeof d'un classe en C++

CptPingu

Administrateur CodeS-SourceS

je ne sais pas quelle est la différence entre une classe et une structure dans ce cas précis.


En C++, classe et structure sont strictement identiques. Une structure est une classe dont la visibilité par défaut est public, au lieu de private.

Est-tu sur que ce n'est pas la taille exact de ta classe appliqué à cet environnement ? Sous Solaris, les types n'ont pas la même taille, ni la même la taille de structure ou de classe (qui varient beaucoup en fonction de certains critères comme la présence ou non de virtual, d'héritage, etc...).
De plus, est-ce vraiment gênant ?

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mercredi 3 février 2010 à 15:07:45 | Re : sizeof d'un classe en C++

fregolo52

Membre Club
reste encore un test avec gcc (super dégueulasse) : -fpack_struct
mais adieu les perfs.

si tu replaces ta classe par une struct et que tu as toujours 20 avec #pragma pack(1), c'est que c'est l'OS qui ne veut pas aligner à 1. et donc tu n'auras jamais 19.
mercredi 3 février 2010 à 15:48:21 | Re : sizeof d'un classe en C++

MahaYassine

@CptPingu: oui je confirme que j'ai 24 à la place de 19. Je ne peux pas la changer en struct car je compte ajouter un constructeur par la suite. Et je veux avoir la taille exacte c'est important et obligatoire pour mon cas.

@fregolo52: avec #pragma pack(1) j'ai bien mon 19 sauf que après je compte ajouter un constructeur et cette option ne fonctionne plus dans ce cas. Pour le -fpack_struct je pourrais pas l'utiliser puisque on va dire adieu au perfs et alors là mon patron risque de me virer !!
mercredi 3 février 2010 à 15:52:41 | Re : sizeof d'un classe en C++

CptPingu

Administrateur CodeS-SourceS

Je ne peux pas la changer en struct car je compte ajouter un constructeur par la suite.


Encore une fois en C++ => class == struct (mise à part la visibilité par défaut)

Code C/C++ :
class Toto
{
  int a
public:
  Toto() {}
};

Est strictement équivalent à:
Code C/C++ :
struct Toto
{
  Toto() {}
private:
  int a
};


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mercredi 3 février 2010 à 16:04:28 | Re : sizeof d'un classe en C++

MahaYassine

Ok merci pour l'info. ça je le découvre pour la première fois !

et donc t'as pas de solution à proposer pour ça ?

1 2

Cette discussion est classée dans : classe, char, sizeof, color, solaris


Répondre à ce message

Sujets en rapport avec ce message

PROBLEME POINTEURS [ par zeloveur ] char * saisirChaine(){ int i=0; char *chn; chn=(char *)malloc(sizeof(char)); do { chn[i]=getchar(); chn=(char *)realloc(chn,(++i+1)*sizeof(char)); } Pointeur et objet ET collection d'objet [ par MrKribou ] En fait je savais pas trop quoi mettre comme titre pour pas copier :pBon je vous explique mon probleme (j'ai pas le source de ce probleme sous la main Parametre sur la ligne de commande [ par payen ] Salut a tous,j'ai un petit souci en C++ ...alors voila : j'ai ecrit un code qui prend comme parametres sur la ligne de commande 2 entiers. Ensuite, pl AIDE POUR LA CLASSE REGISTRE UTIL [ par retaks666 ] on pourrai mexpliker clairement svp comment recuperer une valur texte et le stricker dans une variable char stp..apr exemple dans HKEY_CURRENT_USER, j taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI debutant en c, probleme pour un programmme de compression [ par araborgne ] voila donc je cherchais un programme permettant de compresser et decompresser un fichier texte, et image.j'en ai trouver un, mais il est ecrit en c++, Structure dans une classe [ par briscard ] Hello world!!A ton le droit de passer une structure du type: struct { char *Gamma = new char[3]; char *Phase = new char[3]; }donnee;dans u Classe en c++ [ par aciid_washor ] Bonjour, j'essaye de créé une classe donnee qui comporterait un nom et un numéroJe déclare donc:class donnee{ public: char nom; char num return tableau de caracteres en C++ [ par sozer2 ] Bonjour j'aimerai savoir comment retourner correctement un tableau de caractère en C++Voici mon code qui contient une erreur au niveau du return et au


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,089 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales