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
flagsem/proc/cpuinfo. Você precisa conhecer os possíveis sinalizadores em sua família de arquitetura. Por exemplo, nas plataformas i386 / amd64, o sinalizadorlmidentifica 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]86sã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 -mmostre 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_releasecomando. Mais precisamente,lsb-release -simprime 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 quelsseja 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 .