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

Langage C++ Discussion :

32 ou 64 bits


Sujet :

Langage C++

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 53
    Points
    53
    Par défaut 32 ou 64 bits
    Bonjour

    Quelqu'un peut m'expliquer si je compile en 32 ou en 64 bits.

    Si j'ai bien tout compris en 64 bits les longs (int) et les pointeurs sont codés sur 8 octets -alors que c'est 4 octets sur un systeme 32 bits-

    Voici le programme suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (sizeof(unsigned long) == 8) cout << "long size: Compiling 64-bits" << endl;
    	    else cout << "long size: Compiling 32-bits" << endl;
     
    if (sizeof(void*) == 8) cout << "pointer size: Compiling 64-bits" << endl;
    	    else cout << "pointer size: Compiling 32-bits" << endl;
    Le résultat est
    long size: Compiling 32-bits
    pointer size: Compiling 64-bits
    Donc un long est sur 4 octets mais un pointer sur 8 octets

    Alors 32 ou 64 Bits? Je suis perdus?


    Précisions peut-être utile
    Windows 7, 64 bits
    Compilation mingw-64

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu es probablement en 64bits, sur un linux windows.
    Tu auras quelques précisions dans la page fondamental types de cppreference.com.

    En gros, la taille d'un pointeur est bien 64bits sur les processeurs 64bits, mais un long sera de la taille qui arrange le système.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre confirmé Avatar de KsassPeuk
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Juillet 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 138
    Points : 635
    Points
    635
    Par défaut
    Lu'!

    La taille d'un (u)long selon la norme c'est "au moins 32 bits" toute architecture confondue. Rien n'oblige à faire plus. En l'occurrence, pas mal de compilateurs ont choisit de conserver 32 bits pour ce type parce que c'est suffisant pour la majorité des cas où il est utilisé.

    Pour le void* en revanche, c'est la taille des pointeurs dans le système et si on veut un adressage sur 64 bits, on n'a pas le choix, il nous faut des pointeurs de 64 bits (on peut retreindre à 32 bits si on a les bibliothèques le permettant ou le nécessitant).

    Finalement, si vraiment tu as besoin d'un entier d'une taille particulière, tu peux regarder du côté du header <cstdint> avec les type comme uint64_t.

  4. #4
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 53
    Points
    53
    Par défaut
    Merci

    J'ai fait le test sur un linux 64 bit et j'ai
    long size: Compiling 64-bits
    pointer size: Compiling 64-bits
    J'ignorai l'histoire du "faite comme vous voulez" pour le compilateur. Sympa pour la portabilité Windows/linux enfin bon ...
    Je vais regarder <cstdint>.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est une question de modèle 64 bits utilisé.
    • Linux utilise le modèle "LP64", alias "Long et Pointeurs 64 bits".
    • Windows utilise le modèle "LLP64", alias "Long Long et Pointeurs 64 bits".



    Si tu veux utiliser un type entier qui a la même taille qu'un pointeur, tu dois utiliser intptr_t. Ou à la rigueur size_t, ptrdiff_t, etc. En gros, des types garantis avoir la bonne taille.
    Et si tu veux utiliser un type entier qui est systématiquement sur 64 bits, tu dois utiliser des long long.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

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