-
passage de 32 à 64 bits
Bonjour à tous,
je dois passer un gros projet en C du 32 bits au 64 bits. Plus précisement, je travaille sous Linux 64 bits et le projet a toujours été compilé avec l'option -m32 car il utilise une bibliothèque fournie par mon client et elle-aussi compilée avec l'option -m32.
Mon client a passé sa bibliothèque en 64 bits (en supprimant l'option de compilation) et me demande de faire la même chose sur mon projet.
Ma question est : quels sont les pièges à éviter lors de cette manipulation ? De votre retour d'expérience, quels sont les points auxquels il faut être vigilent lors de ce passage ?
Merci de vos réponses.
-
Hé bien, vérifier que ton projet n'utilise pas d'autres libs en 32 bits semble un bon début. Sinon, ça dépend énormément de ce que fait ton projet. J'aurais tendance à dire que plus c'est "bas-niveau" (comprendre proche de la machine), plus ça va être compliqué. Si tu t'es amusé à faire de l'optimisation de mémoire ou de la manipulation de pointeurs poussées, tu pourrais aussi rencontrer des problèmes. Enfin bref, tout ça pour dire que ça dépend de quel genre de projet c'est.
-
Dans l'absolu, tu commutes, et comme c'est un gros projet, tu passes les tests unitaires, et c'est bon. :aie:
-
Le piège principal, c'est qu'il ne faut pas utiliser de int (ou, surtout sous Windows, de long) là où un type "de la taille d'un pointeur" (size_t, intptr_t) est approprié. Attention aux formats passés à printf/scanf, aussi.
-
Hello,
Bon, je n'ai pas d'expérience à ce niveau, mais je suppose que la taille de certaines variables de base est différente entre 32 et 64 bits. Donc je me méfierais également, si l'application utilise des fichiers, lors de la lecture de ceux-ci.
A+
Edgar;
-
Salut,
Ce site contient une liste d’erreurs courante (à partir de "Lesson 09").
Pour une liste (non-exhaustive) des trucs peuvent poser problème quand tu passes du 32-bit au 64-bit :
- contraintes d’alignement
- les nombres magiques (genre utiliser 4 pour la taille d’un int)
- les décalages de bits (mask = 1 << bitNum ne va pas faire ce que tu penses si mask est sur 64-bit et que bitNum >= 32)
- les bouts de code qui assume que sizeof(int) == sizeof(pointer) pour faire des trucs crades.
- …
-
Merci de vos réponses, cela me donne une bonne liste de points auxquels il faudra être vigilant.