OVH Cloud OVH Cloud

64 bits

6 réponses
Avatar
Fabien LE LEZ
Bonjour,

Cherchant à acheter un processeur, je me suis aperçu que les "64 bits"
sont à la mode en ce moment. Ce qui veut dire que je vais sans doute
devoir, à moyen terme, recompiler pas mal de mes applications en 64
bits.

Est-ce que quelqu'un a déjà fait ce genre de choses, et a repéré des
problèmes récurrents ? J'imagine qu'à part ces <CENSURÉ> de formats de
fichiers binaires, ça se fait de façon assez transparente, mais
sait-on jamais...

Accessoirement, je suppose que typiquement, sur une telle
architecture, "long" et "int" sont codés sur 64 bits, mais qu'en
est-il de "short" ? Et, du coup, peut-on avoir des entiers de 8, 16 et
32 bits ?

Valà valà, merci pour vos réactions...

-- Fabien, qui pense tout à coup au 64 bits parce que c'est à la mode
;-)

6 réponses

Avatar
Richard Delorme
Bonjour,

Cherchant à acheter un processeur, je me suis aperçu que les "64 bits"
sont à la mode en ce moment. Ce qui veut dire que je vais sans doute
devoir, à moyen terme, recompiler pas mal de mes applications en 64
bits.

Est-ce que quelqu'un a déjà fait ce genre de choses, et a repéré des
problèmes récurrents ? J'imagine qu'à part ces <CENSURÉ> de formats de
fichiers binaires, ça se fait de façon assez transparente, mais
sait-on jamais...

Accessoirement, je suppose que typiquement, sur une telle
architecture, "long" et "int" sont codés sur 64 bits, mais qu'en
est-il de "short" ? Et, du coup, peut-on avoir des entiers de 8, 16 et
32 bits ?

Valà valà, merci pour vos réactions...


La bonne réponse est : « ça dépend » :-)
Le modèle le plus courant pour les Unix est :
char 8 bits
short 16 bits
int 32 bits
long 64 bits
pointeur 64 bits
En résumé c'est le modèle : I32LP64

Microsoft préfère :
char 8 bits
short 16 bits
int 32 bits
long 32 bits
pointeur 64 bits
alias le modèle IL32P64

Evidemment d'autres combinaisons sont possibles, histoire d'ajouter à la
confusion :-(

Pour plus de détails :

http://www.usenix.org/publications/login/standards/10.data.html

--
Richard

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

Cherchant à acheter un processeur, je me suis aperçu que les "64
bits" sont à la mode en ce moment. Ce qui veut dire que je vais sans
doute devoir, à moyen terme, recompiler pas mal de mes applications
en 64 bits.


Je ne connais pas ton domaine. Est-ce qu'elles en profiteraient? Si
oui, pourquoi elles n'en profitent pas deja (le 64 bits c'est quand
meme disponible depuis plus de dix ans)? Si non, pourquoi veux-tu y
passer? A ma connaissance, les OS 64 bits peuvent executer les
executables 32 bits et la raison principale de vouloir passer en 64
bits c'est d'augmenter l'espace adressable. (En general, ca diminue
la vitesse et ca augmente la quantite de memoire necessaire).

Est-ce que quelqu'un a déjà fait ce genre de choses, et a repéré des
problèmes récurrents ?


Il y a au moins trois modeles de 64 bits, donc a ma connaissance deux
sont utilises de nos jours:
int long pointeur long long short
ILP64 64 64 64 64 ?
LP64 32 64 64 64 16
LL64 32 32 64 64 16

Le premier a ete tente si j'ai bonne memoire par les DEC sur les
premiers alpha mais le probleme de ne pas avoir des types pour toutes
les tailles (short 16, manque 32 et short 32 manque 16) a fait que le
second est le modele dominant des Unix, le troisieme celui choisi par
Windows.

Le probleme principal est la supposition que certains types sont de
meme taille (windows favorise int=long, unix long=pointeur). Pour
bien nettoyer le code il faut utiliser des intptr_t et uintptr_t.

Un probleme parfois est qu'en changeant l'ordre de champs on arrive a
diminuer la taille de structures (l'alignement des types 64 bits est
generalement sur 8 octets).

Dans du code vieux et C like, il y a des tailles de buffer fixes qui
supposent qu'on formatte des entiers de 32 bits et on se retrouve avec
des buffer overflow en formattant un long de 64 bits qui contient des
valeurs superieures a une certaine borne (ce qui n'arrive
naturellement pas dans le jeux de test qui au depart n'a que des
donnees qui tiennent sur 32 bits...)

Ce sont les choses auxquelles je pense, mais si les programmes sur
lesquelles je travaille tourne en 64 bits, je n'ai pas ete implique
dans le travail initial qui a consiste a les faire fonctionner, donc
il doit y avoir d'autre choses (et je suis certains qu'ils ne
tourneraient pas sous Windows 64 bits meme quand ils tournent sous
Windows 32 bits).

J'imagine qu'à part ces <CENSURÉ> de formats de fichiers binaires,
ça se fait de façon assez transparente, mais sait-on jamais...


Je ne m'occupe pas d'IO. Si c'est bien concu je ne vois guere de
probleme: on change la revision et a la lecture on a simplement une
variable qui controle le nombre d'octets a lire suivant la revision.
Naturellement si on se contente de dump brut de la memoire... mais
alors il y a aussi des problemes sous-jacent en 32 bits.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Fabien LE LEZ
On 21 Jul 2004 09:18:05 +0200, Jean-Marc Bourguet :

Est-ce qu'elles en profiteraient? Si
oui, pourquoi elles n'en profitent pas deja (le 64 bits c'est quand
meme disponible depuis plus de dix ans)?


Je travaille sur PC, et sur ce genre de machines, la barre des 4 Go de
RAM commence à être atteinte. Donc, il n'est pas impossible que d'ici
un an ou deux, je commence à avoir besoin d'accéder à plus de 4 Go de
RAM, d'où des pointeurs de 64 bits.

Note que sous Windows, c'est le 32 bits qui est disponible depuis une
dizaine d'années ;-)

Avatar
François Boutines
"Fabien LE LEZ" a écrit dans le message de news:

On 21 Jul 2004 09:18:05 +0200, Jean-Marc Bourguet :

Est-ce qu'elles en profiteraient? Si
oui, pourquoi elles n'en profitent pas deja (le 64 bits c'est quand
meme disponible depuis plus de dix ans)?


Je travaille sur PC, et sur ce genre de machines, la barre des 4 Go de
RAM commence à être atteinte. Donc, il n'est pas impossible que d'ici
un an ou deux, je commence à avoir besoin d'accéder à plus de 4 Go de
RAM, d'où des pointeurs de 64 bits.


Ou un tout nouveau système de segmentation 32:32 :o)

plus sérieusement (mais guerre plus) considérez cette classe fraction :

http://csserver.evansville.edu:8888/roberts/32

diriez-vous qu'elle passe la construction (pour tous les paramètres
possibles) sur une plateforme ou int fait 64 bits ?
Bien entendu, le compilateur n'y est pour rien, c'est une faute
d'implémentation (dans gcd), mais c'est aussi un exemple de programme qui
marchait (ou marchouillait) mais ne marche plus...


Avatar
Christophe de VIENNE
Fabien LE LEZ wrote:
Je travaille sur PC, et sur ce genre de machines, la barre des 4 Go de
RAM commence à être atteinte. Donc, il n'est pas impossible que d'ici
un an ou deux, je commence à avoir besoin d'accéder à plus de 4 Go de
RAM, d'où des pointeurs de 64 bits.


Je me pose une question métaphysique du coup : Sous linux, le noyau est
capable de gérer jusqu'à 64Go de RAM, avec un processeur 32bits... Le
système est donc capable d'adresser plus de 4Go.
Mais qu'en est-il des programmes ? N'ont-il aucun moyen, sur une
plateforme 32bits, d'adresser plus de 4Go ?

A+

Christophe

--
Christophe de Vienne

Avatar
Jean-Marc Bourguet
Christophe de VIENNE writes:

Fabien LE LEZ wrote:
Je travaille sur PC, et sur ce genre de machines, la barre des 4 Go de
RAM commence à être atteinte. Donc, il n'est pas impossible que d'ici
un an ou deux, je commence à avoir besoin d'accéder à plus de 4 Go de
RAM, d'où des pointeurs de 64 bits.


Je me pose une question métaphysique du coup : Sous linux, le noyau est
capable de gérer jusqu'à 64Go de RAM, avec un processeur 32bits... Le
système est donc capable d'adresser plus de 4Go.
Mais qu'en est-il des programmes ? N'ont-il aucun moyen, sur une plateforme
32bits, d'adresser plus de 4Go ?


Tout depend de ce qu'on appelle un processeur 32 bits. La definition
que je prefere est c'est un processeur dont les registres de donnees
ont 32 bits.

Avec cette definition, on peut avoir un espace d'adressage de plus de
32 bits (utilise la segmentation avec un OS qui remappe les segments
quand c'est necessaire sur un ia32 par exemple et il est courant pour
les 8 bits de pouvoir adresser 64K et les 16 bits de pouvoir adresser
plus que ca -- 20bits d'adresse pour le 8086 par exemple).

Cette definition correspond assez bien avec l'usage que j'ai vu pour
une grande classe de processeurs (y compris des machines adressables
par mots avec des mots de 36 bits et un espace d'adressage de 18 bits)
mais elle n'est pas reellement universelle.

Les processeurs les plus repandus que j'ai vu designe autrement que je
ne le fait sont le 8088 (8bits comme sont bus donnee externe) 68000
(vu qualifie de 16 bits), le 68008 (vu qualifie de 8 bits). Ces deux
processeurs sont d'ailleurs amusant de ce point de vue (le 68000 a des
registres de 32 bits, un bus d'adresse de 24 bits, a des bus donnee
interne et externe de 16 bits, le 68008 a des registres de 32 bits, un
bus d'adresse de 20 bits, a des bus donnee interne de 16 bits et
externe de 8 bits). Apparememnt la taille du bus de donnee externe
est l'autre grand candidats, mais avec les architectures actuelles on
aurait donc des processeur 128 ou 256 bits...

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org