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++Builder Discussion :

Existe-t'il un type tenant sur 2 octets ? [FAQ]


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut Existe-t'il un type tenant sur 2 octets ?
    Dans l'aide de C++ Builder, j'ai trouvé concernant les tailles des types :

    char 8
    short int 16
    int 32


    J'ai déclaré une structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct so
    {
        short int z,y,x;
        int total;
    } So;
    Lorsque je fais afficher sizeof(struct so), j'obtiens 12 !
    Or si je compte bien : 3 * 2 octets + 1 * 4 octets = 10

    Que peut-on en conclure ? Que je suis fou ?

    Comment faire alors pour déclarer une structure qui ait pour types :
    - 3 petits entiers tenant sur 2 octets chacun
    - 1 entier sur 4 octets
    pour qu'au total elle soit de 10 octets ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    oui en effet chui ok avec toi mais je pense que les deux octets en trop doivent etre du au struct .
    Mais j'avoue que si quelqu'un peut dire pkoi exactement ce serait sympatoche

  3. #3
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Je verrais bien un optimisation du compilo pour que chaque structure tienne sur 3 mots (3*4 octets). En effet il est plus rapide pour le programme de gérer des structures multiples de 32bits.

    Je sais pas si c'est ca ms bon c une idée.

    McFoggy.

  4. #4
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    pour vérifier

    faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Toto
    {
    	int toto;
    };
    puis un sizeof(Toto);

    verifier si il fait bien 6 octets

    si oui, le sérializer dans un fichier et recommencer avec d'autres struct contenant des types différents.

    et voir les octets qui sont identiques et ou ils sont placés.
    (bon d'accord, ca ne nous explique pas pourquoi, mais ca permet de cerner un peu plus)


    sinon essayes aussi comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Titi
    {
    	short a : 16;
    	short b : 16;
    	short c : 16;
    	int d : 32;
    };

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    je crois que c'est parceque une structure c'est une classe en C++ et qu'une classe a besoin de diverses informations (table des fonctions membres, etc ...) qui sont nécessaires au dérivations.

    essaye sizeof(short int)

  6. #6
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct so
    {
       int so;
       int so;
    }
    pèse 8 octets comme prévu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct so
    {
       short so;
       short so;
    }
    pèse 4 octets (Jusque là, tout est normal !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct so
    {
       short so;
       int so;
    }
    pèse 8 octets (Je prends une corde ou je laisse tomber ?)

  7. #7
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Titi 
    { 
       short a : 16; 
       short b : 16; 
       short c : 16; 
       int d : 32; 
    };

  8. #8
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Titi 
    { 
       short a : 16; 
       short b : 16; 
       short c : 16; 
       int d : 32; 
    };
    pèse aussi 12 octets et pas 10 comme on aurait pu prévoir (16+16+16+32=80... 80/8=12 bien sûr...)


  9. #9
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    Dans ce cas, on est a peu pres sur que ca se passe au niveau du compilo, comme McFloggy l'a dit.

    C'est tres important pour ton programme, d'avoir 12 octets ou lieu de 10 ?

    Si oui, peut-etre que ca se désactive dans les options de compilations.

  10. #10
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Oui c'est très important malheureusement que ça ne pèse que 10 octets dans mon programme (et pas 12 comme le mesure C++ Builder)... Je vais regarder dans les options de compilation, mais si quelqu'un a d'autres solutions, je suis preneur !

  11. #11
    Membre chevronné
    Avatar de Geronimo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 156
    Points : 1 969
    Points
    1 969
    Par défaut
    Dans les options de compilation, essaie de désactiver les RTTI (Run Time Type Information), et essaie aussi de sélectionner la norme standard ANSI ++.

  12. #12
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    C ds les options de compilations :

    Projet/Options/Options du compilateur avancées

    tu mets Alignement des données sur Byte => sizeof(So) = 10

    C'était bien une optimisation du compilateur.

    McFoggy

  13. #13
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Certains ont dit qu'un struct était géré comme une classe.
    J'ai vu ça aussi sur le code d'un type qui bosse avec moi, ms vous êtes sur que c'est de l'ANSI ça ? C'est pas un ajout de Builder ?

    McFoggy

  14. #14
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Merci à tous;
    J'avais fini par feinter puisqu'en fait cette structure servait pour lire un fichier :

    je faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    struct so
    {
       short x;
       short y;
       short z;
       int valeur;
    }
     
    ...
     
      fichier.read((char *)&So,sizeof(struct so));
    Mais comme il lisait 12 octets à chaque enregistrement au lieu de 10, forcément ça marchait pas... Donc j'avais feinté en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    short x,y,z;
    int valeur;
     
    ...
     
      fichier.read((char *)&x,2);
      fichier.read((char *)&y,2);
      fichier.read((char *)&z,2);
      fichier.read((char *)&valeur,4);
    ce qui me permettait bien de récupérer 10 octets par enregistrement.

    Encore merci, ça pourra toujours servir de connaitre ces options de compilation !!

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

Discussions similaires

  1. Erreur "type incompatible" sur une fonction
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 1
    Dernier message: 19/07/2006, 11h59
  2. Type mismatch sur 1 seul serveur
    Par Berns dans le forum ASP
    Réponses: 1
    Dernier message: 24/05/2006, 22h44
  3. [Socket] Send/Recv type double sur architectures différentes
    Par nicolas.pied dans le forum Réseau
    Réponses: 4
    Dernier message: 31/03/2006, 20h33
  4. [access] champs type text sur un pc blob sur un autre
    Par Harry dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/07/2004, 09h30
  5. Existe-t-il des Dé-compilateurs sur Terre?
    Par Julien_riquelme dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 15/12/2003, 01h46

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