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 :

Gérer le passage 32bits vers 64bits


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Gérer le passage 32bits vers 64bits
    Je recompile des prgs en 64 bits sans trop de soucis fonctionnel, et en apparence sans erreur d'éxécution.
    Par contre, le nombre de warning est décourageant.

    J'utilise visual studio (sous Windows).
    unsigned et DWORD restent des 32 bits, et size_t (et SIZE_T) deviennent des 64 bits. Cas très fréquent de warning, des variables ou membres de structure de type unsigned auxquels on affecte des valeurs provenant de la STL (exemple, size() et length() qui sont des size_t).
    Une solution serait de user des static_cast<unsigned>, mais après en avoir tapé 328 je me dis qu'il y aura un soucis un jour... Sans compter la lisibilité du code.
    Une autre solution serait de remplacer tous les unsigned par des size_t. C'est facile et peut-être sécurisant, mais sans doute pas toujours opportun. Parfois aussi le warning est alors déplacé ailleurs.

    size_t ou unsigned ?
    Revoir tout le code, oui mais en faisant attention à quoi ?
    Y'a-t-il une "recette" ?
    Merci.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par défaut
    Salut,

    Tu as de la chance si l'appli que l'on te demande de porter ne caste pas des pointeurs vers des longs (et vice-versa). J'ai eu à intervenir sur une horreur de la sorte (qui en plus est multi-plateforme, donc les longs ne faisaient pas forcément la même taille partout).

    Pour ma part, je préfère utiliser size_t à unsigned ou à DWORD dans tout le code qui n'est pas spécifique à une plateforme. Size_t rajoute une valeur sémantique (on va stocker une taille ou un nombre d'élément) qu'il n'y a pas dans unsigned. Et size_t est justement fait pour s'adapter aux limites de l'architecture. À moins d'en stocker de gros tableaux, le surpoids lié à l'utilisation de size_t est négligeable.

    Pour le code spécifique plateforme (genre UI), un static_cast.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    salut,

    les joies de la migration, à ce jeu j'ai découvert que le int faisait 4 octets quelque soit le plate-forme (tout le contraire de ce qu'on apprend à l'école).
    par contre le "long", 4 octets en 32bit et 8 octets 64bit.

    mieux vaut travailler avec les types de base.

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    long est malheureusement un type de base...
    J'évite de l'utiliser.
    Au niveau de visual studio, tu peux compiler un code 32 bits en activant les warnings qui sont liés à la compilation 64 bits en ajoutant l'option -Wp64 à la ligne de commande, c'est assez pratique.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si la taille des données importe vraiment, je ne comprends pas que vous n'ayiez pas vos propres int32, int64, etc.
    Et là, la migration est triviale.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 122
    Par défaut
    Pour assurer la portabilité, il est aussi possible d'utiliser les types d'entiers déclarés dans cstdint (C++11). Pour les entiers non signés, on y trouve, par exemple, uint32_t et uint64_t :
    http://www.cplusplus.com/reference/clibrary/cstdint/

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    long est malheureusement un type de base...
    J'évite de l'utiliser.
    Tout à fait d'accord.
    Quand tu utilises long tu sais à quoi t'attendre, par contre DWORD, je ne sais pas si c'est un int ou un long. (bon je viens de faire F12 dans VS, j'ai tout faux, c'est unsigned long)

    Y'a-t-il une "recette" ?
    Celle de Bousk me parait pas mal!

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    C++ ne donne pas la longueur des types de bases, seulement un rapport: char ≤ short ≤ int ≤ long ≤ long long
    un int est censé s'aligner sur la taille du mot mémoire.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2015, 11h14
  2. [AC-2013] Migration access 2010 32bits vers access 2013 64bits
    Par Gerard.chery dans le forum Access
    Réponses: 2
    Dernier message: 10/11/2014, 11h35
  3. printf() et migration de 32bits vers 64bits
    Par adiGuba dans le forum C
    Réponses: 2
    Dernier message: 13/09/2011, 17h08
  4. migration serveur 32Bit vers 64Bit
    Par brunon dans le forum Administration
    Réponses: 1
    Dernier message: 22/05/2008, 12h42
  5. [9207] Migration d'une base de 9207 32bits vers 64bits
    Par Cyborg289 dans le forum Oracle
    Réponses: 3
    Dernier message: 27/10/2006, 18h33

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