Le matériel, le noyau et les programmes de l'espace utilisateur peuvent avoir des tailles de mots différentes¹.
-
Vous pouvez voir si le CPU est 64 bits, 32 bits ou capable des deux en vérifiant le
flags
ligne en/proc/cpuinfo
. Vous devez connaître les drapeaux possibles sur votre famille d'architecture. Par exemple, sur les plateformes i386/amd64, lelm
L'indicateur identifie les processeurs compatibles amd64 (les processeurs qui n'ont pas cet indicateur sont i386 uniquement).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
-
Vous pouvez voir si le noyau est 32 bits ou 64 bits en interrogeant l'architecture avec
uname -m
. Par exemple,i[3456]86
sont 32 bits tandis quex86_64
est 64 bits. Notez que sur plusieurs architectures, un noyau 64 bits peut exécuter des programmes utilisateur 32 bits, donc même si leuname -m
montre un noyau 64 bits, il n'y a aucune garantie que les bibliothèques 64 bits seront disponibles.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
-
Vous pouvez voir ce qui est disponible en userland en interrogeant le support LSB avec le
lsb_release
commande. Plus précisément,lsb_release -s
imprime un:
- liste séparée des fonctionnalités LSB prises en charge. Chaque caractéristique a la formemodule-version-architecture
. Par exemple, la disponibilité d'une bibliothèque C ix86 est indiquée parcore-2.0-ia32
, tandis quecore-2.0-amd64
est l'analogique pour amd64. Cependant, toutes les distributions ne déclarent pas tous les modules LSB disponibles, il peut donc y en avoir plus que ce qui est détectable de cette manière. -
Vous pouvez voir pour quels programmes d'architecture sur le système sont construits avec une commande comme
file /bin/ls
. Notez qu'il est possible d'avoir un système mixte; même sils
est un programme 64 bits, votre système peut avoir des bibliothèques installées pour exécuter des programmes 32 bits, et (moins souvent) vice versa. -
Vous pouvez trouver la taille de mot préférée pour le développement (en supposant qu'un compilateur C est disponible) en compilant un programme C de 5 lignes qui imprime
sizeof(void*)
ousizeof(size_t)
. Vous pouvez obtenir les mêmes informations de manière un peu moins fiable² en exécutant la commandegetconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
En ce qui concerne les machines virtuelles, la possibilité d'exécuter une machine virtuelle 64 bits sur un système 32 bits ou vice versa dépend de la technologie de votre machine virtuelle. Voir en particulierComment installer une machine virtuelle Linux 64 bits sur un Linux 32 bits ?
¹ "Word size" est le nom habituel de ce que vous appelez bitness.
² Il peut être peu fiable si quelqu'un a installé un autre compilateur C avec une architecture cible différente mais a conservé la valeur par défaut du système getconf
.