L'hardware, il kernel ei programmi in spazio utente possono avere word size diverse¹.
-
Puoi vedere se la CPU è a 64 bit, 32 bit o compatibile con entrambi controllando
flags
riga in/proc/cpuinfo
. Devi conoscere i possibili flag sulla tua famiglia di architettura. Ad esempio, sulle piattaforme i386/amd64, illm
flag identifica le CPU compatibili con amd64 (le CPU che non hanno quel flag sono solo i386).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
-
Puoi vedere se il kernel è a 32 o 64 bit interrogando l'architettura con
uname -m
. Ad esempio,i[3456]86
sono a 32 bit mentrex86_64
è a 64 bit. Si noti che su diverse architetture, un kernel a 64 bit può eseguire programmi utente a 32 bit, quindi anche seuname -m
mostra un kernel a 64 bit, non vi è alcuna garanzia che le librerie a 64 bit saranno disponibili.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
-
Puoi vedere cosa è disponibile in userland interrogando il supporto LSB con
lsb_release
comando. Più precisamente,lsb_release -s
stampa un:
elenco separato delle funzionalità LSB supportate. Ogni elemento ha la formamodule-version-architecture
. Ad esempio, la disponibilità di una libreria C ix86 è indicata dacore-2.0-ia32
, mentrecore-2.0-amd64
è l'analogo per amd64. Tuttavia, non tutte le distribuzioni dichiarano tutti i moduli LSB disponibili, quindi potrebbero essere disponibili più moduli di quelli rilevabili in questo modo. -
Puoi vedere per quale architettura sono costruiti i programmi sul sistema con un comando come
file /bin/ls
. Si noti che è possibile avere un sistema misto; anche sels
è un programma a 64 bit, il tuo sistema potrebbe avere librerie installate per eseguire programmi a 32 bit e (meno comunemente) viceversa. -
Puoi scoprire la dimensione della parola preferita per lo sviluppo (supponendo che sia disponibile un compilatore C) compilando un programma C di 5 righe che stampa
sizeof(void*)
osizeof(size_t)
. Puoi ottenere le stesse informazioni in un modo leggermente meno affidabile² eseguendo il comandogetconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
Per quanto riguarda le macchine virtuali, la possibilità di eseguire una VM a 64 bit su un sistema a 32 bit o viceversa dipende dalla tecnologia della macchina virtuale. Vedi in particolare Come posso installare una macchina virtuale Linux a 64 bit su un Linux a 32 bit?
¹ "Word size" è il nome usuale per ciò che chiami testimonianza.
² Può essere inaffidabile se qualcuno ha installato un compilatore C alternativo con un'architettura di destinazione diversa ma ha mantenuto l'impostazione predefinita del sistema getconf
.