IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

directive #pragma pack()


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut directive #pragma pack()
    Salut

    Que fait au juste la directive #pragma pack() ???

    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Sous Visual C++, elle permet de régler l'alignement mémoire (1, 2, 4 ou 8 octets).

  3. #3
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    Ces cool merci
    mais en quoi consiste l'allignement de la memoire ??? et quand est-ce indispensable???

    encore merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca consiste à aligner les membres d'une structure sur un certain "pas" d'octets, pour optimiser les accès mémoires.

    Exemple parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Aligné par défaut sur 4 octets
    struct Padded
    {
        char c;
        int i;
        short s;
    };
     
    // Aligné sur 1 octet (= pas d'alignement)
    #pragma pack(push)
    #pragma pack(1)
    struct UnPadded
    {
        char c;
        int i;
        short s;
    };
    #pragma pack(pop)
     
    cout << sizeof(Padded) << "octets" <<  endl;
    cout << sizeof(UnPadded) << "octets" << endl;
    Citation Envoyé par Sortie
    12 octets
    7 octets
    Exemple typique d'utilisation indispensable : si tu vas faire une lecture bit à bit d'une telle structure dans un fichier. Avec un alignement sur 4 octets, tu vas coller 7 octets dans une structure qui en fait 12, les valeurs seront incohérentes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/06/2014, 16h39
  2. [Débutant] #pragma pack(1) en VB.net
    Par neoangelo5 dans le forum VB.NET
    Réponses: 8
    Dernier message: 09/11/2011, 17h08
  3. que signifie la directive #pragma pack(1)
    Par xweb-10 dans le forum C++
    Réponses: 6
    Dernier message: 07/11/2010, 23h28
  4. Directive #pragma
    Par Altess dans le forum C
    Réponses: 3
    Dernier message: 13/02/2009, 00h02
  5. [Compilation] qmake et #pragma pack(1)
    Par Invité dans le forum Outils
    Réponses: 4
    Dernier message: 23/10/2008, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo