O hardware, o kernel e os programas de espaço do usuário podem ter diferentes tamanhos de palavras¹.
-
Você pode ver se a CPU é de 64 bits, 32 bits ou capaz de ambas, verificando a linha
flags
em/proc/cpuinfo
. Você precisa conhecer os possíveis sinalizadores em sua família de arquitetura. Por exemplo, nas plataformas i386 / amd64, o sinalizadorlm
identifica as CPUs compatíveis com amd64 (as CPUs que não possuem esse sinalizador são apenas i386).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
-
Você pode ver se o kernel é de 32 bits ou 64 bits, consultando a arquitetura com
uname -m
. Por exemplo,i[3456]86
são de 32 bits, enquantox86_64
é de 64 bits. Observe que, em várias arquiteturas, um kernel de 64 bits pode executar programas de usuário 32 bits, portanto, mesmo que ouname -m
mostre um kernel de 64 bits, não há garantia de que as bibliotecas de 64 bits estarão disponíveis.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
-
Você pode ver o que está disponível no userland consultando o suporte LSB com o
lsb_release
comando. Mais precisamente,lsb-release -s
imprime uma lista separada por:
de recursos LSB suportados. Cada recurso possui o formatomodule-version-architecture
. Por exemplo, a disponibilidade de uma biblioteca ix86 C é indicada porcore-2.0-ia32
, enquantocore-2.0-amd64
é o análogo para amd64. Nem todas as distribuições declaram todos os módulos LSB disponíveis, portanto, pode estar disponível mais do que é detectável desta forma. -
Você pode ver quais programas de arquitetura no sistema são criados com um comando como
file /bin/ls
. Note que é possível ter um sistema misto; mesmo quels
seja um programa de 64 bits, seu sistema pode ter bibliotecas instaladas para executar programas de 32 bits e (menos comumente) vice-versa. -
Você pode descobrir o tamanho de palavra preferido para desenvolvimento (supondo que um compilador C esteja disponível) compilando um programa C de 5 linhas que imprime
sizeof(void*)
ousizeof(size_t)
. Você pode obter as mesmas informações de maneira um pouco menos confiável² executando o comandogetconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
Quanto às máquinas virtuais, se você pode executar uma VM de 64 bits em um sistema de 32 bits ou vice-versa, depende da sua tecnologia de máquina virtual. Veja em particular Como posso instalar uma máquina virtual Linux de 64 bits em um Linux de 32 bits?
¹ “Tamanho do Word” é o nome usual para o que você chama de bitness.
² Pode não ser confiável se alguém instalou um compilador C alternativo com uma arquitetura de destino diferente, mas manteve o padrão do sistema getconf
.