Quais são as diferenças entre os sistemas de 32 e 64 bits?
Se você usou os dois, que tipo de diferenças acentuadas você experimentou?
Seria um problema usar programas de 32 bits em sistemas de 64 bits em alguns casos?
64-bit
operating-systems
32-bit
computer-architecture
cpu-architecture
Mehper C. Palavuzlar
fonte
fonte
Respostas:
Nota: Essas respostas se aplicam a CPUs de PCs padrão baseadas em x86 (Intel e AMD) e Windows (como normalmente configuradas para usuários finais). Outros chips de 32 ou 64 bits, outros sistemas operacionais e outras configurações de sistemas operacionais podem ter vantagens e desvantagens.
Do ponto de vista técnico, um sistema operacional de 64 bits oferece:
Permite que processos individuais tratem mais de 4 GB de RAM cada (na prática, a maioria, mas não todos os SOs de 32 bits, também limitam a RAM total do sistema utilizável a menos de 4 GB, não apenas o máximo por aplicativo).
Todos os ponteiros levam 8 bytes em vez de 4 bytes. O efeito no uso da RAM é mínimo (porque é provável que você não tenha um aplicativo preenchido com gigabytes de ponteiros), mas no pior caso teórico, isso pode fazer com que o cache da CPU seja capaz de armazenar 1/2 do número de ponteiros (tornando efetivamente 1/2 do tamanho). Para a maioria dos aplicativos, isso não é grande coisa.
Existem muitos outros registros de CPU de uso geral no modo de 64 bits. Os registros são a memória mais rápida em todo o sistema. Existem apenas 8 no modo de 32 bits e 16 registradores de uso geral no modo de 64 bits. Nos aplicativos de computação científica que escrevi, vi um aumento de desempenho de 30% ao recompilar no modo de 64 bits (meu aplicativo poderia realmente usar os registros extras).
A maioria dos sistemas operacionais de 32 bits permite apenas que aplicativos individuais usem 2 GB de RAM, mesmo se você tiver 4 GB instalados. Isso ocorre porque os outros 2 GB de espaço de endereço são reservados para o compartilhamento de dados entre aplicativos, com o sistema operacional e para a comunicação com os drivers. O Windows e o Linux permitem que você ajuste essa compensação para 3 GB para aplicativos e 1 GB compartilhado, mas isso pode causar problemas para alguns aplicativos que não esperam a mudança. Também acho que isso pode prejudicar uma placa gráfica com 1 GB de RAM (mas não tenho certeza). Um sistema operacional de 64 bits pode oferecer aplicativos individuais de 32 bits mais próximos dos 4 GB completos para jogar.
Da perspectiva de um usuário:
A velocidade do aplicativo geralmente é mais rápida para um aplicativo de 64 bits em um sistema operacional de 64 bits em comparação com a versão de 32 bits do aplicativo em um sistema operacional de 32 bits, mas a maioria dos usuários não vê essa aceleração. A maioria dos aplicativos para usuários normais não aproveita realmente os registros extras ou os benefícios são compensados por indicadores maiores preenchendo o cache.
Se você tiver aplicativos de grande consumo de memória (como editores de fotos, processamento de vídeo, computação científica etc.), se possui (ou pode comprar) mais de 3 GB de RAM e pode obter uma versão de 64 bits do aplicativo, a escolha é fácil: use o sistema operacional de 64 bits.
Alguns hardwares não possuem drivers de 64 bits. Verifique sua placa-mãe, todas as placas plug-in e todos os dispositivos USB antes de fazer a troca. Observe que nos primeiros dias do Windows Vista, havia muitos problemas com os drivers. Hoje em dia as coisas geralmente são melhores.
Se você executa tantos aplicativos ao mesmo tempo que está ficando sem RAM (normalmente você pode dizer isso porque seu computador começa a ficar muito lento e você ouve a unidade de disco rígido esmagando), então você quer um sistema operacional de 64 bits (e RAM suficiente).
Você pode executar aplicativos de 32 bits (mas não drivers) no Windows de 64 bits sem problemas. A pior desaceleração que eu medi para um aplicativo de 32 bits no Windows de 64 bits é de cerca de 5% (o que significa que, se levasse 60 segundos para fazer algo no Windows de 32 bits, levaria no máximo 60 * 1,05 = 65 segundos com o mesmo aplicativo de 32 bits no Windows de 64 bits).
O que 32 bits vs. 64 bits não implica:
Nos sistemas x86, 32 bits vs. 64 bits se refere diretamente ao tamanho dos ponteiros. Isso é tudo.
Não se refere ao tamanho do
int
tipo C. Isso é decidido pela implementação específica do compilador, e a maioria dos compiladores populares escolhe 32 bitsint
em sistemas de 64 bits.Ele não se refere diretamente ao tamanho dos registros normais não apontadores. No entanto, o uso de registros aritméticos de 64 bits exige que o aplicativo e o SO também estejam executando no modo ponteiro de 64 bits.
Não se refere diretamente ao tamanho do barramento de endereço físico. Por exemplo, um sistema com linhas de cache de 64 bits de largura e um máximo de 512 GiB de memória precisa apenas de 33 bits em seu barramento de endereços (ou seja
log2(512*1024**3) - log2(64) = 33
).Não se refere ao tamanho do barramento de dados físico: está mais relacionado aos custos de fabricação (número de pinos no soquete da CPU) e tamanhos de linha de cache.
fonte
Basicamente, você pode fazer tudo em uma escala maior:
Os dois grandes tipos de arquiteturas de 64 bits são as arquiteturas x64 e IA64. Mas x64 é o mais popular de longe.
O x64 pode executar comandos x86 e x64. O IA64 também executa comandos x86, mas não executa extensões SSE. Há hardware dedicado no Itanium para executar instruções x86; é um emulador, mas em hardware.
Como o @Phil mencionou, você pode ter uma visão mais profunda de como funciona aqui .
fonte
O maior impacto que as pessoas notarão no momento é que um PC de 32 bits pode endereçar apenas um máximo de 4 GB de memória. Quando você remove a memória alocada para outros usos pelo sistema operacional, seu PC provavelmente mostra apenas cerca de 3,25 GB de memória utilizável. Vá para 64 bits e esse limite desaparece.
Se você está desenvolvendo seriamente, isso pode ser muito importante. Tente executar várias máquinas virtuais e você ficará sem memória em breve. É mais provável que os servidores precisem de memória extra e, portanto, você descobrirá que o uso de 64 bits é muito maior em servidores do que em desktops. A lei de Moore garante que teremos mais memória nas máquinas e, em algum momento, os desktops também passarão para 64 bits como padrão.
Para uma descrição muito mais detalhada das diferenças de processador, confira este excelente artigo da ArsTechnica .
fonte
Nada é gratuito: embora aplicativos de 64 bits possam acessar mais memória que aplicativos de 32 bits, a desvantagem é que eles precisam de mais memória. Todos os ponteiros que precisavam de 4 bytes, agora precisam de 8. Por exemplo, o requisito padrão no Emacs é 60% mais memória quando criado para uma arquitetura de 64 bits. Esse espaço extra prejudica o desempenho em todos os níveis da hierarquia de memória: executáveis maiores levam mais tempo para carregar do disco, conjuntos de trabalho maiores causam mais paginação e objetos maiores significam menos ajuste nos caches do processador. Se você pensa em uma CPU com um cache L1 de 16K, um aplicativo de 32 bits pode funcionar com ponteiros 4096 antes que ele perca e vá para o cache L2, mas um aplicativo de 64 bits precisa acessar o cache L2 após apenas 2048 ponteiros.
No x64, isso é atenuado por outras melhorias na arquitetura, como mais registros, mas no PowerPC, se seu aplicativo não pode usar> 4G, é provável que seja executado mais rapidamente em "ppc" do que em "ppc64". Mesmo na Intel, existem cargas de trabalho que são executadas mais rapidamente no x86, e poucas são mais de 5% mais rápidas no x64 que no x86.
fonte
Um sistema operacional de 64 bits pode usar mais RAM. É sobre isso, na prática. O Vista / 7 de 64 bits usa recursos de segurança mais sofisticados para onde eles colocam componentes vitais na RAM, mas isso não é realmente 'perceptível' como tal.
Partida ChrisInEdmonton:
fonte
Não tenho certeza de que posso responder a todas as suas perguntas sem escrever um ensaio inteiro (sempre existe o Google ...), mas você não precisa projetar seus aplicativos de maneira diferente para 64 bits. Eu acho que o que está sendo referido é que você deve estar atento a coisas como tamanhos de ponteiros que não são mais do mesmo tamanho que ints. E você tem toda uma carga de problemas em potencial com suposições embutidas em certos tipos de dados com quatro bytes de comprimento que podem não ser mais verdadeiros.
É provável que desarme todos os tipos de coisas em seu aplicativo - tudo, desde salvar / carregar de arquivo, iterar através de dados, alinhamento de dados, até operações de dados bit a bit. Se você possui uma base de código existente que está tentando portar ou trabalha em ambas, é provável que você tenha muitas pequenas imperfeições para resolver.
Eu acho que isso é uma questão de implementação, e não de design. Ou seja, acho que o "design" de dizer, um pacote de edição de fotos será o mesmo, independentemente do tamanho das palavras. Escrevemos código que é compilado nas versões de 32 e 64 bits, e o design certamente não difere entre os dois - é a mesma base de código.
O "grande negócio" fundamental em 64 bits é que você obtém acesso a um espaço de endereço de memória muito maior que 32 bits. Isso significa que você pode realmente colocar mais de 4Gb de memória no computador e fazer com que faça a diferença.
Tenho certeza de que outras respostas entrarão nos detalhes e benefícios mais do que eu.
Em termos de detecção da diferença, então programaticamente você apenas verifica o tamanho de um ponteiro (por exemplo, sizeof (void *)). A resposta de 4 significa seus 32 bits e 8 significa que você está executando em um ambiente de 64 bits.
fonte
Um processo de 32 bits possui um espaço de endereços virtual de 4 GB; isso pode ser muito pouco para alguns aplicativos. Um aplicativo de 64 bits possui um espaço de endereço praticamente ilimitado (é claro que é limitado, mas você provavelmente não atingirá esse limite).
No OSX, existem outras vantagens. Consulte o artigo a seguir , por que o kernel é executado no espaço de endereço de 64 bits (independentemente se o aplicativo executa 64 ou 32) ou o aplicativo é executado no espaço de endereço de 64 bits (enquanto o kernel ainda é de 32 bits) leva a um desempenho muito melhor. Para resumir: Se um deles é de 64 bits (kernel ou aplicativo, ou ambos, é claro), o TLB ("translation lookaside buffer") não precisa ser liberado sempre que você alternar do kernel para usar o espaço e voltar (o que acelerará acesso à RAM).
Além disso, você obtém ganhos de desempenho ao trabalhar com variáveis "long long int" (variáveis de 64 bits, como uint64_t). Uma CPU de 32 bits pode adicionar / dividir / subtrair / multiplicar dois valores de 64 bits, mas não em uma única operação de hardware. Em vez disso, ele precisa dividir esta operação em duas (ou mais) operações de 32 bits. Portanto, um aplicativo que funcione muito com números de 64 bits terá um ganho de velocidade ao poder fazer cálculos de 64 bits diretamente no hardware.
Por último, mas não menos importante, a arquitetura x86-64 oferece mais registros do que as arquiteturas clássicas x86. Trabalhar com registradores é muito mais rápido que trabalhar com RAM e quanto mais registros a CPU tiver, menos frequentemente precisará trocar valores de registradores para RAM e voltar para registradores.
Para descobrir se sua CPU pode funcionar no modo de 64 bits, você pode observar várias variáveis sysctl. Por exemplo, abra um terminal e digite
Se listar EM64T, sua CPU suporta espaço de endereço de 64 bits, de acordo com o padrão x86-64. Você também pode procurar
Se diz 1 (verdadeiro / ativado), sua CPU suporta o modo x86-64 bits; se diz 0 (falso / desativado), não. Se a configuração não for encontrada, considere-a falsa.
Nota: Você também pode buscar variáveis sysctl em um aplicativo C nativo, sem precisar usar a ferramenta de linha de comando. Vejo
fonte
Observe que o espaço de endereço pode ser usado para mais de memória (real). Também é possível mapear arquivos grandes na memória, o que pode melhorar o desempenho em padrões de acesso mais estranhos, porque o cache mais poderoso e eficiente no nível da VM no nível do bloco entra em ação. Também é mais seguro alocar grandes blocos de memória em 64 bits, pois o heapmanager é menor. provavelmente encontrará uma fragmentação do espaço de endereço que não permitirá que ele aloque um grande bloco.
Algumas das coisas ditas neste segmento (como a duplicação de # registradores) se aplicam apenas a x86-> x86_64, e não a 64 bits em geral. Assim como o x86_64 garantido tem SSE2, 686 opcodes e uma maneira barata de fazer PIC. Esses recursos não são estritamente de 64 bits, mas de cortar o legado e corrigir limitações conhecidas do x86
Além disso, muitas vezes as pessoas apontam para a duplicação de registros como a causa da aceleração, enquanto é mais provável que o SSE2 padrão use esse truque (acelerando memcpy e funções semelhantes). Se você ativar o mesmo conjunto para x86, a diferença será bem menor. (*) (***)
Lembre-se também de que geralmente há uma penalidade envolvida porque a estrutura média dos dados aumenta simplesmente porque o tamanho de um ponteiro é maior. Isso também tem efeitos de cache, mas é mais perceptível no fato de que o memcpy () médio (ou qualquer que seja o equivalente para a cópia de memória do seu idioma) levará mais tempo. Isso é apenas na magnitude de alguns por cento btw, mas as acelerações nomeadas acima também são nessa magnitude.
Geralmente, as despesas gerais de alinhamento também são maiores nas arquiteturas de 64 bits (os registros anteriores de 32 bits geralmente se tornam uma mistura de valores de 32 e 64 bits), ampliando ainda mais as estruturas.
No geral, meus testes simples indicam que eles serão cancelados aproximadamente se os drivers e as bibliotecas de tempo de execução tiverem sido totalmente adaptados, não dando diferença de velocidade significativa para o aplicativo médio. No entanto, alguns aplicativos podem ficar subitamente mais rápidos (por exemplo, quando dependem do AES) ou mais lentos (a estrutura de dados crucial é constantemente movida / digitalizada / percorrida e contém muitos indicadores). Os testes foram no Windows e, portanto, a otimização do PIC não foi comparada.
Observe que a maioria das linguagens JIT-VM (Java, .NET) usa significativamente mais indicadores em média (internamente) do que, por exemplo, C ++. Provavelmente, o uso de memória aumenta mais do que no programa médio, mas não me atrevo a equiparar isso diretamente a efeitos de lentidão (já que esses são realmente complexos e divertidos, e muitas vezes difíceis de prever sem medir)
O Windows de 64 bits usa como padrão o SSE2 para ponto flutuante, o que parece acelerar operações simples e desacelerar operações complexas (sin, cos etc).
(*) um fato pouco conhecido é que o número de registros SSE também dobra no modo de 64 bits
(**) O Dr. Dobbs publicou um bom artigo há alguns anos.
fonte
Além das questões óbvias no espaço da memória que a maioria das pessoas menciona aqui, acho que vale a pena examinar a noção de "computação de palavras-chave" de que Knuth (entre outros) tem falado ultimamente. Há muitas eficiências a serem obtidas com a manipulação de bits, e as operações bit a bit em uma palavra de 64 bits vão muito além do que em uma palavra de 32 bits. Em resumo, você pode realizar mais operações nos registros sem precisar recuperar a memória e, do ponto de vista do desempenho, essa é uma grande vitória.
Dê uma olhada no Volume 4, pré-Fascicle 1A, para ver alguns exemplos dos truques interessantes de que estou falando.
fonte
Além da capacidade de endereçar mais memória, o x86_64 também possui mais registros, permitindo que o compilador gere um código mais eficiente. A melhoria de desempenho geralmente será bastante pequena.
A arquitetura x86_64 é compatível com o x86. É possível executar sistemas operacionais de 32 bits não modificados. Também é possível executar software de 32 bits não modificado em um sistema operacional de 64 bits. Isso exigirá todas as bibliotecas de 32 bits usuais. Eles podem precisar ser instalados separadamente.
fonte
Esta discussão já é muito longa, mas ...
A maioria das respostas concentra-se no fato de você ter um espaço de endereço maior de 64 bits, para poder endereçar mais memória. Para cerca de 99% de todas as aplicações, isso é totalmente irrelevante. Grito grande.
A verdadeira razão pela qual 64 bits é bom é não que os registros sejam maiores, mas existem o dobro deles! Isso significa que o compilador pode manter mais dos seus valores registrados, em vez de derramá-los na memória e carregá-los novamente algumas instruções mais tarde. Se e quando um compilador de otimização está desenrolando seus loops para você, ele pode desenrolá-los aproximadamente o dobro, o que pode realmente ajudar no desempenho.
Além disso, as convenções de chamadas / chamadas de sub-rotina para 64 bits foram definidas para manter a maioria dos parâmetros passados nos registradores, em vez de o chamador empurrá-los para a pilha e o receptor os exibir.
Portanto, um aplicativo C / C ++ "típico" terá uma melhoria de desempenho de 10% ou 15% apenas recompilando para 64 bits. (Supondo que uma parte do aplicativo tenha limites de computação. É claro que isso não é garantido; todos os computadores esperam a mesma velocidade. Sua milhagem pode variar.)
fonte
Além das vantagens já mencionadas, aqui estão mais algumas sobre segurança:
Outra vantagem que vem à mente é que a quantidade de memória virtual contígua alocada
vmalloc()
no kernel do Linux pode ser maior no modo de 64 bits.fonte
Com uma máquina de 32 bits, você tem apenas 4.294.967.295 bytes de memória para endereçar. Com uma máquina de 64 bits, você tem 1,84467441 × 10 ^ 19 bytes de memória.
A Wikipedia diz isso
fonte
Cotação do Microsoft.com:
fonte
Kristof e Poshi declararam as principais diferenças técnicas entre os sistemas operacionais de 32 e 64 bits. A experiência do usuário geralmente é muito diferente da teoria. As versões de 64 bits para consumidor do Windows até o momento (XP e Vista) têm grandes lacunas no suporte de driver. Eu já tive muitas impressoras, scanners e outros dispositivos externos que não funcionam com as versões de 64 bits que funcionam bem com as versões de 32 bits. São dispositivos que possuem drivers de 64 bits e ainda não funcionaram. Neste ponto, eu recomendaria que você ficasse longe de qualquer coisa baseada em consumidor que seja de 64 bits da Microsoft até ouvir sobre como o Windows 7 lida com isso, de usuários finais reais, não apenas dos super-geeks que atualmente têm acesso a ele. Dê pelo menos 6 meses e veja o que as pessoas estão experimentando.
fonte
Alguns programas de jogo usam uma representação de placa de bits . Xadrez, damas e outros itens, por exemplo, têm uma placa 8x8, ou seja, 64 quadrados, portanto, ter pelo menos 64 bits em uma palavra de máquina ajuda significativamente o desempenho.
Lembro-me de ler sobre um programa de xadrez cuja construção de 64 bits era quase duas vezes mais rápida que a versão de 32 bits.
fonte
O termo 32 bits e 64 bits refere-se à maneira como um processador de computador (também chamado de CPU) lida com informações. As versões de 64 bits do Windows manipulam grandes quantidades de memória de acesso aleatório (RAM) com mais eficiência do que os sistemas de 32 bits.
velocidade pode ser diferente na minha opinião
fonte
Outro ponto em relação ao Microsoft Windows é que, por muitos anos, existe a API Win32, que se destina a sistemas operacionais de 32 bits e não é otimizada para compilação de 64 bits. Quando escrevo algumas DLLs para meus aplicativos, geralmente compilo no Win32, que não é a versão de 64 bits. Antes do Vista, não havia muitas versões bem-sucedidas de 64 bits do Windows, acredito que onde eu trabalho, minha nova máquina possui 4 GB de RAM, mas ainda estou usando o Windows XP Pro de 32 bits, pois é um sistema operacional O / estável conhecido. S em relação ao XP64 ou Vista.
Eu acho que você pode querer também olhar para trás quando houve a mudança de 16 bits para 32 bits para obter mais detalhes sobre por que a mudança pode ser um grande problema para algumas pessoas. Os aplicativos de missão crítica que uma empresa pode executar em uma área de trabalho, por exemplo, pequenos pacotes de contabilidade, podem não ser executados em um sistema operacional de 64 bits e, portanto, há a necessidade de manter uma máquina legada, virtual ou real.
Alterar o tamanho de um endereço pode ter grandes ramificações e repercussões.
fonte
Para propósitos mais práticos, você provavelmente não notará diferença.
Você deve ter uma CPU de 64 bits (a maioria das CPUs nos últimos anos) para instalar um sistema operacional de 64 bits.
Existem algumas vantagens em um sistema operacional de 64 bits:
Na maioria dos cenários, os programas de 64 bits usam um pouco mais de memória, mas para um computador pessoal, isso geralmente não é percebido.
fonte