Que vaut sizeof(long) ? [Résolu]

Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Dernière intervention
10 juillet 2018
- 20 févr. 2008 à 10:34 - Dernière réponse :
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Derniè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

Y a-t-il un autre moyen plus propre ?

Merci.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 11:33
3
Merci
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.

Merci DeAtHCrAsH 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de DeAtHCrAsH
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 10:51
0
Merci
Salut,

La taille ne dépend pas de l'OS mais du processeur urtilisé.
Sur un système 32 bits un long vaudra toujours 4octets ( long = int).

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 10:58
0
Merci
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.

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Dernière intervention
10 juillet 2018
- 20 févr. 2008 à 11:13
0
Merci
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.
Commenter la réponse de fregolo52
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 20 févr. 2008 à 11:26
0
Merci
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.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 11:36
0
Merci
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 ?

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 20 févr. 2008 à 14:19
0
Merci
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.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 20 févr. 2008 à 14:23
0
Merci
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.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 15:02
0
Merci
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?

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 20 févr. 2008 à 15:57
0
Merci
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.).

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
- 20 févr. 2008 à 16:22
0
Merci
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é.

C'est ca ?

Shell
Commenter la réponse de DeAtHCrAsH

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.