fregolo52
Messages postés1115Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 2021
-
20 févr. 2008 à 10:34
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
20 févr. 2008 à 16:22
Bonjour,
J'ai cherché sans succès. Je voudrais tester la taille d'un long à la compilation. Je n'ai pas trouver de variable de compilation qui aurait cette valeur.
Sachant que suivant les OS sizeof(long) vaut 4 ou 8, je voulais mettre un message d'erreur si sizeof(long) != 4.
Pour le moment je fais :
#if ULONG_MAX != 0xffffffffUL#error sizeof(long) !4> alignement incompatible
#endif
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 févr. 2008 à 11:33
Si tu es sure que le système ciblé est Windows (32bits ou 64bits) le problème ne se pose pas.
=> Windows 32 bits : sizeof(long) = sizeof(int) = 4 octets
=> Windows 64 bits : sizeof(long) = sizeof(int) = 4 octets (j'en suis quasi sure mais c'est à vérifier)
=> Linux : sizeof(long) = 8 octets
Seuls les système à base Unix propose du vrai 64bits de mémoire.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 févr. 2008 à 10:58
Je complète ma réponse qui peut porter à confusion...Si tu fais référence à windows xp 64 bits il est fort probable que sizeof(long) sizeof(int) 4.Sous Linux (systeme 64 bits et processeur 64 bits) un sizeof(long) 8 et sizeof(int) 4.
fregolo52
Messages postés1115Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 20 févr. 2008 à 11:13
Je n'ai pas de Windows 64bits pour vérifier et le développement est fait par 2 sociétés et on ne sait pas quel sera l'OS cible final. On sait juste que c'est Microsoft donc on aura la mauvaise surprise plus tard (XP/Vista - 32/64bits). Donc on veut se protéger au max.
Sur un ancien projet Windows 32bits et SUSE 64bits, nous avions remarqué que le sizeof(long) était différents sur les 2 OS, on a donc tout passé en 'int'. Mais on connaissait les OS cibles.
Mais pour ce prjet, je veux juste un moyen sûre pour obliger les 2 sociétés a utiliser les compilateurs compatibles.
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 févr. 2008 à 11:26
sizeof(long) est dépendant du COMPILO et non de l'OS.Sur compilateurs MS (ce qu'on devrait employer pour produire des binaires ciblant Windows) sizeof(long) sizeof(int) TOUJOURS 4 fort heureusement.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 févr. 2008 à 11:36
BruNews> Je ne connais pas vraiment le monde du 64bits que je pense mort né, mais il existe donc des compilo sous windows capable de produire du vrai 64 bits ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 févr. 2008 à 14:19
Mais c'est quoi tout ce discours ? Unix comme Windows propose du 64.
Je continue pour Windows (j'ignore Unix mais devrait être voisin):
Le 64 est sous 2 formes, le x64 qui est une extension du 32 (archi x86) et IA64 ne tournant que sur Itanium (le vrai 64 natif). L'OS posé ne dépend donc que de l'architechture matérielle présente, allait sans dire mais aussi bien en le disant.
Pour revenir au sizeof(type), il y a bien entendu le type 64 bits sur compilo Windows, sizeof(__int64) donne 8 depuis des lustres et TRES JUSTEMENT Microsoft n'a pas fait la connerie de changer la taille des types selon l'OS ciblé, c'est la garantie de pérennité du code existant.
*((DWORD*) buf) = valeur;
écrit 4 octets et basta, que je compile en x64 ou autre.
*((UINT64*) buf) = valeur;
écrira 8 octets en compil x64.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 févr. 2008 à 14:23
Shell > compilo MS créant du 64, ben heureusement et cela depuis que l'architechture existe. Pour ma part je ne fais que du x64 (compilo présent dans VS Pro et sup). Le compilo pour Itanium est dans l'édition Team System de VS.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 févr. 2008 à 15:02
BruNews> Ca confirme ce que je disais, j'ai pas assimilé toutes ces notions liées au 64bits. Donc si je comprend bien windows xp 64bits n'est en fait qu'une version de XP compilé en x64 tout ca pour etre compatible avec les processeur 64bits commercialisé pour le grand publique?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 févr. 2008 à 15:57
Mais non, j'ai l'impression qu'on ne se comprend pas...
Tous les CPUs produits depuis qlqs temps SONT x64 compatibles, on peut donc y mettre un system 32 ou x64 (XPx64 ou Vista x64). Le fait que le x64 ne soit pas répendu au grand public est que les drivers pour x64 tardaient à venir, qu'il faut + de mémoire pour faire tourner le PC correctement en x64, etc...
Il est clair que ce n'est pas de suite que M. tout le monde passera en x64 mais par contre sur serveurs d'entreprise, ça commence enfin à venir (je dis enfin car on peut s'éclater en prog avec la bonne gestion SSE2 et >, avec les registres additionnels, etc.).
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 20 févr. 2008 à 16:22
Ok, je pige enfin :-)
D'ou ta remarque sur l'Itanium quand tu dis que c'est actuellement le seul processeur Intel gérant le vrai 64 bits en natif (IA64), ce qui est différént de tout ces processeurs 64bits (ou plutot x64) que l'on trouve actuellement sur le marché.