begin process at 2012 05 30 05:12:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Que vaut sizeof(long) ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Que vaut sizeof(long) ?

mercredi 20 février 2008 à 10:34:57 | Que vaut sizeof(long) ?

fregolo52

Membre Club
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.
mercredi 20 février 2008 à 10:51:48 | Re : Que vaut sizeof(long) ?

DeAtHCrAsH

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
mercredi 20 février 2008 à 10:58:08 | Re : Que vaut sizeof(long) ?

DeAtHCrAsH

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
mercredi 20 février 2008 à 11:13:06 | Re : Que vaut sizeof(long) ?

fregolo52

Membre Club

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.
mercredi 20 février 2008 à 11:26:59 | Re : Que vaut sizeof(long) ?

BruNews

Administrateur CodeS-SourceS
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++
mercredi 20 février 2008 à 11:33:58 | Re : Que vaut sizeof(long) ?

DeAtHCrAsH

Réponse acceptée !
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.

mercredi 20 février 2008 à 11:36:18 | Re : Que vaut sizeof(long) ?

DeAtHCrAsH

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
mercredi 20 février 2008 à 14:19:36 | Re : Que vaut sizeof(long) ?

BruNews

Administrateur CodeS-SourceS
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++
mercredi 20 février 2008 à 14:23:48 | Re : Que vaut sizeof(long) ?

BruNews

Administrateur CodeS-SourceS
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++
mercredi 20 février 2008 à 15:02:15 | Re : Que vaut sizeof(long) ?

DeAtHCrAsH

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

1 2

Cette discussion est classée dans : long, compilation, sizeof


Répondre à ce message

Sujets en rapport avec ce message

sizeof bizarre [ par khayyam ] bonjour, j'ai la structure suivante : typedef struct { unsigned char sign1, sign2; unsigned long size_totale, reserve,offset; un long double et VC++ [ par omi ] J'ai un leger probleme avec visual C++ 7.0 .N'y a t'il pas un moyen de lui faire accepter les long double car il les prend pour des double normaux cad Probleme avec le registre [ par punx120 ] Voila j'aimerais recuperer la valeur d'une chaine dans la base des registres, mais je n'y arrive pasvoici le code que j'utilise : #include #include vo Thread [ par Vince007 ] Bonjour, je vous laisse se message pour savoir si qqu'un qui connait bien les thread et les sémaphores sous Linux pourrait m'indiquer la méthode de co Enorme probleme lors de la compilation avec Visual C++ 6 [ par hepho ] Alors mon probleme est le suivantlorsque que je desire compiler mon programme une erreur apparaitLe pilote de clavier specifie par la ligne KEYBOARD = probleme de compilation !! [ par Darkneon ] Voila, j'ai passe de Borland C++ a VC++ et j'ai un petit(?) probleme.Lorsque je veux cree un .exe, ca me dit:Linking...LINK : fatal error LNK1104: can compilation [ par rodrigos ] Problème de compilation (VC++) [ par vecchio56 ] Est-il normal que le code suivant génère une erreur à la compilation ? (Avec Visaul C++ 6.0)int main(){ int i=5; char c[i]; return 0;} debug vs release [ par coockiesch ] Hello!J'aimerais savoir les différences entre la compilation release et la compilation debug...Quels sont leurs avantages et leurs inconvéniants.Merci I NEED SOMEBODY HELP [ par lerilcy ] Mon programme coupe des fichiers en part egales puis les recompose dans un 2eme temps.Un peu comme les compresseurs type RZsplit Winrar... A la compil


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales