64bit_icon_20090824.jpg

Fondamentalement du code compilé en 32 bits ou 64 bits peut être exécutés quelque soit la plateforme 32 bits ou 64 bits. La contrainte principale concerne la taille des données et donc du type de variable utilisée par le compilateur.

Lorsque vous créez un programme en C, Objective-C ou tout autre langage vous devez définir vos variables, en général un entier est déclaré par le mot « int ». D’un façon tout aussi commune cet « entier » est codé sur 32 bits sur un système 32 et bien sur sur une longueur de 64 bits sur un OS de 64 bits.

En choisissant un modèle de données codées sur 64 bits, un système 32 bits ne peut exploiter les données ce qui à pour effet direct de ne pas autoriser l’exécution du programme. Alors comment fait Apple pour permettre l’exécution de programmes compilées en 32 bits pour être exécutés sur Snow Leopard 64 bits ?

En choisissant le mode LP64, Apple reste sur un modèle 32 Bits sauf pour l’adressage des pointeurs qui lui utilise 64 Bits. Un pointeur étant juste une adresse en mémoire, Apple se donne ainsi la possibilité d’utiliser plus d’adresses de mémoire qu’avec des pointeurs en 32 Bits.

Par contre les types de variable restent sur un mode 32 Bits afin d’assurer la compatibilité.

Microsoft à choisi un solution plus radicale : LLP64 tous est en 64 bits, dès lors aucune application 32 Bits ne peut être exécutée sur un système 64 Bits de Microsoft. L’astuce trouvée par Redmond est de placer un « émulateur » 3 bits dans ces systèmes.

les deux premières lignes sont présentes à titre indicatif, car le probleme apparu aussi lors du passage vers une architecture 32 Bits.

Tableau comparatif des différents modes :

Modèle de données Taille d’un short (bits) Taille d’un int (bits) Taille d’un long (bits) Taille d’un pointeur (bits)
LP32 16 16 32 32
ILP32 16 32 32 32
LP64 16 32 64 64
LLP64 16 32 32 64
ILP64 16 64 64 64

(1 commentaire)

  1. Bonjour. Je n’y comprends rien et donc je n’ai aucun avis particulier concernant les différents modes, mais après avoir fait une recherche rapide sur ces termes barbares il me semble que Microsoft a choisi le mode LLP64 et Apple le mode LP64, au moins dans le cas de Mac OS X Server ?

    « 64-Bit Programming in UNIX and Windows: The key difference between 64-bit programming in UNIX and Windows is the programming model. UNIX uses the LP64 model and Windows uses the LLP64 model. »

    http://technet.microsoft.com/en-us/library/bb496995.aspx

    « Abstract Data Models: These considerations led to the selection of an abstract data model called LLP64 (or P64). In the LLP64 data model, only pointers expand to 64 bits; all other basic data types (integer and long) remain 32 bits in length. »

    http://msdn.microsoft.com/en-us/library/aa384083%28VS.85%29.aspx

    « Mac OS X Server supports the standard LP64 data model, which means that code written for other 64-bit UNIX-based systems can easily be ported to
    Mac OS X Server. »

    http://www.apple.com/server/macosx/technology/sixtyfour-bit.html

    J’aime

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.