begin process at 2012 05 30 18:23:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Taille variables dans une class/struct


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

Taille variables dans une class/struct

jeudi 9 juin 2011 à 17:48:09 | Taille variables dans une class/struct

LA_Tupac

Membre Club
Salut à tous. Je me penche sur la taille des données car je fais des écritures binaires d'objets à taille variable dans des fichiers.
En faisant des test avec des sizeof(), je me suis rendu compte que les class prennent au minimum 1 octet même si elles sont vides. Si j'y ajoute une variable de 4 octets, alors la class fait 4 octets. Jusque ici, je comprends pourquoi.
Mais ce qui me chiffone, c'est que si cette foi j'y ajoute un tableau de char à taille fixe, la taille change de 4 en 4. Autrement dit, un char[4] fait la même taille qu'un char[5] ou un char[6] ou un char[7].
Si on pouvait m'éclairer.. Merci
jeudi 9 juin 2011 à 19:51:09 | Re : Taille variables dans une class/struct

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
C'est dû à l'alignement mémoire.

Code C/C++ :
#include <iostream>

class Empty
{
};

class A
{
  int i;
  char c;
  char tab[4];
};

class APacked
{
  int i;
  char c;
  char tab[4];
} __attribute__((packed));

class A2
{
  int i;
  char c;
  char tab[5];
};

class A2Packed
{
  int i;
  char c;
  char tab[5];
} __attribute__((packed));


int main()
{
  std::cout << sizeof (Empty) << std::endl
	    << sizeof (A) << std::endl
	    << sizeof (APacked) << std::endl
	    << sizeof (A2) << std::endl
	    << sizeof (A2Packed) << std::endl;

  return 0;
}


Sortie:


1
12
9
12
10



________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 9 juin 2011 à 23:29:51 | Re : Taille variables dans une class/struct

LA_Tupac

Membre Club
Ok dac! c'est aligné sur 4 octets si j'ai bien compris. Et l'__attribute__((packed)) spécifie d'aligner à l'octet près..
Du coup question subsidiare: pourquoi cet alignement? rapidité d'accès?

Merci beaucoup Pingu
jeudi 9 juin 2011 à 23:46:36 | Re : Taille variables dans une class/struct

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Pour vulgariser, c'est une question d'architecture. (Pas lié à un langage).
Bien détaillé ici:
http://en.wikipedia.org/wiki/Data_structure_alignment

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
vendredi 10 juin 2011 à 10:07:51 | Re : Taille variables dans une class/struct

LA_Tupac

Membre Club
Ok tout est clair maintenant 4*8=32
Merci encore pour ces explications pragmatiques

longues vies aux pingouins dans l'informatique


Cette discussion est classée dans : taille, variables, class, char, struct


Répondre à ce message

Sujets en rapport avec ce message

Lecture/Ecriture/Modification d'une structure dans un fichier [ par paniX ] Bonjour. Alors voici mon probleme:j'ai créé une structure client qui a cette forme :struct client{ int id; char nom[30]; char prenom[30]; char adresse Pb Class et pointeur ... [ par payen ] salut a tous,j'ai un petit probleme en C++: j'ai definit une class CImage, avec entre autre, un pointeur vers une variable de type char (char *nom_ima struct [ par ready4 ] Je ne sais pas comment initialiser mes moteurs //intialisation moteursM1 = {2, 1, 1, 2, 0, 0, 120};M2 = {8, 4, 4, 8, 0, 0, 80};M3 = {32, 16, 16, 32, 0 taille de matrice [ par MLine ] Dans c++ builder 5, je déclare une matrice dans ma classe Organism :class Organism{ // plein d'autres trucs protected : static float DispCoef Allocation dynamique [ par cybermatthieu ] Bonjours,Je suis en train de construire une App qui comporte une class qui comprend 12 pointeur a Char et leur fonction. Le probleme est que j'inicial envoi d'une structure dans un socket [ par Taum ] Bonjour, voilà j'ai besoin d'envoyer une structure dans un paquet udp :typedef struct { unsigned short TransactionId; short Flags; short Questions; sh Structures C [ par nicolas66 ] Bonsoir tlm,j'ai un petit ennui avec la fonction C suivante :---------------------------------------------------------struct passwd *getpwnam (const c Espace mémoire occupé par une structure [ par HCJarod ] Salut,j'ai un vague souvenir concernant les structures en C (struct) qui n'occupe pas la même place mémoire en fonction du sens de la déclaration. Ca Ordre de déclaration des variables ... [ par icedreamer ] Salut.Je continue mon petit prog et les pb suivent aussi ..Il semble que l'ordre de déclaration de mes variables joue un role dans le focntionnement d Taille des variables [ par appstmd ] Bonjour !J'ai des problèmes avec l'utilisation des variables de chaîne de caractères : je ne connais pas la taille, je suis donc obligé de déclarer me


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 2,512 sec (3)

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