Entier int passé en 64 bits (8 octets) et non 31 bits (4 octets)

Entier int passé en 64 bits (8 octets) et non 31 bits (4 octets) - C++ - Programmation

Marsh Posté le 13-04-2013 à 17:57:11    

Bonjour,
 
Je suis en train d'interfacer un programme c++ avec une librairie commerciale développée en 64 bits et en fortran.
Pour cette nouvelle version de la librairie, je dois passer toutes les fonctions fortran appelant cette librairie en 64 bits (INTEGER*8 ..). Pour cela c'est fait.
 
Mon problème c'est que je dois passer des entiers de mon programme C++ vers le fortran, tous cela en 64 bits également.
Donc, même si je travaille en Visual 2005, en 64 bits (je crois), sur un PC 64 bits, mes entiers int en C++ sont codés en 4 bits (ce que je confirme bien avec un sizeof(.) ).
 
Je pensais, en travaillant en Visual 2005 en 64 bits, que mes entiers C++ (int) seraient codés en 64 bits (8 octets) et non plus en 32 bits (4 octets).
Est-ce normal, même en 64 bits, de trouver mes entiers toujours en 32 bits ?  
 
Est-ce qu'il est possible, par défaut de faire comprendre à mon programme que tous les entiers int sont maintenant codés, par défaut, en 64 bits ?
 
La seule possibilité que j'ai trouvé actuellement, pour travailler, sans  erreur de compilation et d'éxécution, c'est de travailler avec des 'long long int', qui, eux, sont bien en 64 bits (mes long int sont encore, comme les int, en 32 bits (4 octets)).
 
Est-ce que un #define INT int / #define INT long long int  en début de code ne permettrait pas ce travail ?
 
Merci d'avance de votre réponse, car cela me dépanerait pour éviter de tous changer dans mon code actuel.

Reply

Marsh Posté le 13-04-2013 à 17:57:11   

Reply

Marsh Posté le 13-04-2013 à 21:55:02    

Citation :

Est-ce normal, même en 64 bits, de trouver mes entiers toujours en 32 bits ?

A priori non, il y a peut être un flag a positionner pour sortir du code 64 bits avec ton compilo.
Sinon, j'irais voir du côté de <cstdint> et si ce n'est pas présent sur ton compilo, il doit y en avoir la version boost que tu peux te recompiler et utiliser.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-04-2013 à 22:04:00    

les "int" font 32 bits, même sur un windows 64 bits, cf http://en.wikipedia.org/wiki/64-bit#64-bit_data_models
 
Pour garantir la taille des données, quand on en a besoin, je n'insisterai jamais assez sur l'utilisation des intxx_t, qui garantissent la taille de la donnée ainsi créée, à utiliser pour toutes les données en interface avec d'autres systèmes.
 
Bon courage pour reprendre votre code ! :)

Message cité 1 fois
Message édité par Farian le 13-04-2013 à 22:06:15
Reply

Marsh Posté le 13-04-2013 à 22:20:58    

Farian a écrit :

Pour garantir la taille des données, quand on en a besoin, je n'insisterai jamais assez sur l'utilisation des intxx_t, qui garantissent la taille de la donnée ainsi créée, à utiliser pour toutes les données en interface avec d'autres systèmes.

On est sur la même longueur d'onde.
Pour rester sur ce type de question, j'ai lu avec intérêt cet après-midi la proposition d'ajouter les fonctions de Network byteorder conversion (hton* ntoh*) a la librairie standard pour le C++ 14
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed