Sistemas de 32 bits vs. 64 bits

224

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?

Mehper C. Palavuzlar
fonte
Existem muitas confusões aqui, e em outros locais na Web, entre o endereçamento físico (acesso ao RAM), o PEA afeta isso, a placa mãe afeta isso e o endereçamento lógico (memória virtual por processo). Em um sistema operacional de 32 bits, a memória virtual é limitada a 4 GB menos o que o kernel reserva. É independente da RAM. Você pode ter 0,1 MB ou 8 GB de RAM e exatamente 4 GB de memória virtual (mas alguns reservados pelo kernel). O PEA pode ser usado para ter mais RAM, mas não é uma resposta perfeita, pois o kernel NÃO PODE acessar tudo.
Ctrl-alt-delor 13/09/12

Respostas:

264

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 inttipo C. Isso é decidido pela implementação específica do compilador, e a maioria dos compiladores populares escolhe 32 bits intem 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.

Mr Fooz
fonte
8
Resposta muito boa. Especialmente porque você observou que não há realmente um limite de 4 GB de RAM, mas o limite de uso de memória do processo. Apenas para sua informação, acho que você deveria dar uma olhada neste link: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Breakthrough
8
São aplicativos que não funcionam em janelas de 64 bits: aplicativos de 16 bits / aqueles que usam drivers de modo kernel de 32 bits ou não assinados. Isso é muito para um viciado em software como eu ...
fluxtendu
1
@flextendu, dados os requisitos de desempenho desses programas antigos, você certamente poderia executá-los em uma máquina virtual. Com o VMware player, o Virtual PC e o Virtual Box por aí, não há razão para não experimentar um deles, se você tiver uma licença do Windows de 32 bits. Se você não quiser mexer com isso, eles provavelmente também funcionarão no "Modo Windows XP".
Mark Booth
6
BTW, aplicativos de 32 bits não usarão mais de 2 GiB de RAM, a menos que um sinalizador específico esteja ativado em seu manifesto. Fonte: blogs.technet.com/b/markrussinovich/archive/2008/11/17/...
Hello71
Sim, tenho certeza que o Hello71 encontrou algo muito importante que não é abordado aqui: a maioria dos aplicativos de 32 bits nunca aproveita diretamente a RAM extra. Eu acho que vale a pena mencionar isso, não?
Django Reinhardt
107

Basicamente, você pode fazer tudo em uma escala maior:

  1. RAM por SO: limite de RAM de 4 GB em x86 para o SO (na maioria das vezes)
  2. RAM por processo: limite de RAM de 4 GB em x86 para processos (sempre). Se você acha que isso não é importante, tente executar um enorme aplicativo intensivo de banco de dados MSSQL. Ele usará mais de 4 GB se você o tiver disponível e funcionar muito melhor.
  3. Endereços: os endereços têm 64 bits em vez de 32 bits, permitindo que você tenha programas "maiores" que usam mais memória.
  4. Alças disponíveis para programas: você pode criar mais alças de arquivos, processos, ... Exemplo no Windows x64, você pode criar> 2000 threads por processo, mas no x86 mais perto de algumas centenas.
  5. Programas mais amplos disponíveis: a partir de um x64, você pode executar os programas x86 e x64. (Exemplo de janelas: wow64, windows32 na emulação windows64)
  6. Opções de emulação: Em um x64, você pode executar as VMs x86 e x64.
  7. Mais rápido: alguns cálculos são mais rápidos em uma CPU de 64 bits
  8. Dividir vários recursos do sistema: Muita memória RAM é muito importante quando você deseja executar pelo menos uma VM que divide os recursos do sistema.
  9. Programas exclusivos disponíveis: vários novos programas suportam apenas x64. Exemplo Exchange 2007.
  10. Futuro x86 obsoleto ?: Com o tempo, mais e mais bits de 64 bits serão usados ​​e mais e mais x86 não serão usados. Portanto, os fornecedores suportam apenas mais e mais 64 bits.

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 .

Brian R. Bondy
fonte
1
Hum. IA64 executa comandos x86. Porém, ele não faz extensões SSE. Há hardware dedicado no Itanium para executar instruções x86; é um emulador, mas em hardware.
tzot 25/09/08
2
Alguns anos atrás, Raymond Chen postou sobre o fio 2,000 "limite", e é mais ou menos uma lenda urbana: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e
Voto positivo para Arstechnica por suas explicações.
Avihu Turzion 5/08/09
2
O limite de RAM de 4 GB não é muito verdadeiro (é um limite artificial para os sistemas Windows de usuários domésticos), verifique PAE . Com a maioria dos hardwares atualizados, um kernel Linux PAE (que é usado por padrão para 32 bits) pode endereçar mais de 4 GB. O mesmo se aplica ao FreeBSD e NetBSD.
Izzy
Os sistemas de 32 bits não podem usar mais de 4 GB (1º ponto) devido a esses "endereços" (3º ponto) .Porque o número mais alto de 32 bits é 4.294.967.296 (= 4 GB). Portanto, seus 1º e 3º golpes são os mesmos. Você pode remover o terceiro ponto. :)
Jet,
46

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
7
A plataforma de 32 bits e a limitação de 4 GB são um pouco inadequadas e são (eram) principalmente um limite de escolha / design da arquitetura do sistema operacional. Realmente, os 4 GB de 32 bits estão realmente limitados em um espaço VA de processo. O endereço físico suporta 36-bits na CPU Intel de 32 bits do
Alto Jeff
1
Você faz uma boa observação que certamente é verdadeira. Mas o impacto no mundo real dos usuários de PC é que a máquina não usará os 4 GB completos pelos quais pagou. Meu pai teve esse problema e ainda está confuso que os 4 GB que ele pagou não podem ser totalmente usados.
2
Aprecie o seu argumento, mas apenas tentar conduzir a noção de que a correção não está no processador ou está indo para 64 bits, é apenas uma questão de um design de SO ligeiramente aprimorado. Isso é abordado, por exemplo, nas versões corporativas do Windows, mesmo nas versões de 32 bits. Permite 64 GB de RAM.
Tall Jeff
Tecnicamente, o limite não desaparece. Ele avança para onde é impraticável / impossível instalar tanta memória RAM em uma máquina a qualquer momento na próxima década.
Veja minha observação sobre o PAE acima: o limite de 4 GB não é verdadeiro para todo o sistema - mas apenas se aplica a processos únicos (nenhum processo pode acessar 4 GB e a si próprio - mas todo o sistema, ou seja, todos os processos juntos, pode com o PAE ativado ) Portanto, a menos que alguém tenha aplicativos que lucram com a capacidade de acessar 4 GB ou mais (como editores / conversores de vídeo com grandes arquivos de vídeo) e 8 GB ou mais instalados, não deve fazer muita diferença usar 32 bits ou 64 bits.
Izzy
31

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.

James
fonte
2
Esta resposta sugere que o PowerPC64 não é tão bom quanto x86-64. A verdade é que o powerpc64 não melhorou o powerpc, pois o powerpc não foi quebrado.
Ctrl-alt-delor 13/09/12
3
O Linux agora possui uma ABI x32, com todos os benefícios de velocidade do x86-64 (mais registros, ABI reprojetada), mas com ponteiros de 32 bits. +1 por apontar que os benefícios do modo de 64 bits não são do aumento real da largura, mas da chance de deixar cair muita bagagem que estava retendo a arquitetura. Regs de 64 bits têm valor para alguns aplicativos, mas o espaço do ponteiro de 64 bits é menos necessário.
Peter Cordes
19

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:

Um sistema operacional de 32 bits em um sistema ix86 com PAE pode endereçar até 64 GB de RAM. Um sistema operacional de 64 bits no x86-64 pode acessar até 256 TB de espaço de endereço virtual, embora isso possa ser gerado nos processadores subsequentes, até 16 EB. Observe que alguns sistemas operacionais limitam ainda mais o espaço de endereço e a maioria das placas-mãe possui restrições adicionais.

Phoshi
fonte
4
Para um sistema operacional, APENAS 32 bits versus 64 bits refere-se ao tamanho dos ponteiros (o que seu primeiro parágrafo discute corretamente). -1: Alguns sistemas operacionais optam por bloquear o tamanho inteiro padrão para o tamanho do ponteiro, mas nem o Windows nem o Linux o fazem. A precisão matemática inteira é inalterada. Nenhum sistema operacional amplamente usado altera a precisão do ponto flutuante (o que o segundo parágrafo afirma). "float" ou "single" tem 32 bits, "double" tem 64 bits, independentemente de o SO usar ponteiros de 32 ou 64 bits.
Sr. Fooz
Ah, eu estava claramente equivocada, obrigado por esclarecer isso :)
Phoshi
Sem problemas. -1 -> +1
Mr Fooz
Pode valer a pena editar sua resposta para indicar a quantidade de RAM que pode ser acessada. Um sistema operacional de 32 bits em um sistema ix86 com PAE pode endereçar até 64 GB de RAM. Um sistema operacional de 64 bits no x86-64 pode acessar até 256 TB de espaço de endereço virtual, embora isso possa ser gerado nos processadores subseqüentes, até 16 EB. Observe que alguns sistemas operacionais limitam ainda mais o espaço de endereço e a maioria das placas-mãe possui restrições adicionais.
ChrisInEdmonton 30/10/09
Eu queria mantê-lo simples, como os números são em sua maioria alta o suficiente para ser irrelevante no momento, mas não pode ferir a colocá-los no momento.
Phoshi
14

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.

Greg Whitfield
fonte
4
Se você escreve programas que assumem casualmente que certos tipos de ponteiros têm o mesmo tamanho de certos tipos integrais, você está fazendo isso errado. Isso é verdade há muito tempo.
David Thornley
@ David: Você está absolutamente certo. Infelizmente, há uma tonelada de código por aí que faz exatamente isso.
10

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

sysctl machdep.cpu.extfeatures

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

sysctl hw.optional.x86_64

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

man 3 sysctl
Mecki
fonte
erro: "machdep.cpu.extfeatures" é uma chave desconhecida
Eu acho que também não é chamado EM64T, se você não tiver a infelicidade de ter informações.
9

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.

Marco van de Voort
fonte
8

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
7

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.

Kristof Provost
fonte
Mais registros e uma ABI reprojetada (passando a função args no registro) geralmente são de 10 a 15% de aceleração, o que é bastante decente. Agora existe uma ABI x32 do Linux com ponteiros de 32 bits, mas usando o modo longo amd64 e convenções de chamada args-in-registrators. Portanto, você tem todos os benefícios de velocidade do amd64, mas sem a sobrecarga de precisar de 64 bits para cada ponteiro. É bom para tudo o que não precisa de mais de 4 GB de memória (virtual).
Peter Cordes
6

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.)

Morra em Sente
fonte
Embora o conjunto de instruções seja melhor para x64 que x86, isso normalmente não é importante. O código de 64 bits também pode ser mais lento que o de 32 bits, porque as instruções podem aumentar, portanto, menos delas cabem no cache. (Desenrolar loops, BTW, é uma técnica muito questionável hoje em dia, pois aumentará o número de falhas de cache.) Onde trabalho, precisamos de 64 bits para aumentar o endereçamento de memória.
David Thornley
David, Os conjuntos de instruções x64 e x86 são quase idênticos, exceto pelo tamanho do operando e por alguns prefixos de registro. Com o IA64, também conhecido como Itanium ou Itanic, os códigos de 64 bits normalmente seriam 3x os códigos x86 e estressam o cache de instruções exatamente como você diz. Esse foi um grande fator no motivo pelo qual a arquitetura falhou miseravelmente. Porém, com o x86, também conhecido como AMD64 ou EM64T, esse crescimento de código geralmente é de apenas 10 a 20%.
Embora o x64 torne mais registráveis endereçáveis , não tenho certeza de quanto ele realmente aumenta o número de registros físicos disponíveis - todos os processadores x86 recentes têm muitos (> 100) registros "sombra" e usam "renomeação de registros" + execução especulativa para permitir que caminhos de código independentes sejam executados em paralelo a um grau. Com efeito, se n caminhos de código independentes estiverem em execução, n vezes o número de registros disponíveis (até que todos os registros de sombra acabem).
@j_random_hacker. Você está absolutamente certo de que esses truques estão acontecendo sob a arquitetura. Mas não importa quantos registros sombra estejam disponíveis, se o programa precisar trabalhar com mais de 8 itens de dados e apenas 8 registros forem expostos no conjunto de instruções, o compilador deverá gerar as instruções de armazenamento / recarregamento. Então, sim, X64 realmente faz o dobro de registros "disponível"
Minha experiência é que isso é bem menos e é compensado pelo fato de que o avg memblock a ser movido é maior.
Marco van de Voort
6

Além das vantagens já mencionadas, aqui estão mais algumas sobre segurança:

  • cpus x86_64 têm o bit de não execução em suas tabelas de páginas. Ou seja, isso pode impedir explorações de confidencialidade causadas por excedentes de buffer. As cpus x86 de 32 bits são compatíveis apenas com esse recurso no modo PAE.
  • Um espaço de endereço maior permite uma melhor randomização do layout do espaço de endereço (ASLR), o que dificulta a exploração de excedentes de buffer.
  • O cpus x86_64 possui código independente da posição, ou seja, acesso a dados relativo ao registro do ponteiro de instruções (RIP).

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.

Knweiss
fonte
5

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

Os processadores de 64 bits calculam tarefas específicas (como fatoriais de grandes números) duas vezes mais rápido que o trabalho em ambientes de 32 bits (o exemplo é derivado da comparação entre a Calculadora do Windows de 32 e 64 bits; perceptível para o fatorial de, digamos, 100.000 ) Isso dá uma sensação geral das possibilidades teóricas de aplicativos otimizados de 64 bits.

Enquanto as arquiteturas de 64 bits facilitam indiscutivelmente o trabalho com grandes conjuntos de dados em aplicativos como vídeo digital, computação científica e grandes bancos de dados, houve um debate considerável sobre se eles ou seus modos de compatibilidade de 32 bits serão mais rápidos do que o preço comparável Sistemas de 32 bits para outras tarefas. Na arquitetura x86-64 (AMD64), a maioria dos sistemas operacionais e aplicativos de 32 bits é capaz de funcionar sem problemas no hardware de 64 bits.

As máquinas virtuais Java de 64 bits da Sun são mais lentas para iniciar do que suas máquinas virtuais de 32 bits porque a Sun implementou apenas o compilador JIT "servidor" (C2) para plataformas de 64 bits. [9] O compilador JIT "cliente" (C1), que produz código menos eficiente, mas compila muito mais rapidamente, não está disponível nas plataformas de 64 bits.

Note-se que a velocidade não é o único fator a ser considerado em uma comparação de processadores de 32 e 64 bits. Aplicativos como multitarefa, teste de estresse e clustering (para computação de alto desempenho), HPC, podem ser mais adequados para uma arquitetura de 64 bits, dada a implantação correta. Clusters de 64 bits foram amplamente implantados em grandes organizações como IBM, HP e Microsoft, por esse motivo.

Mark Cidade
fonte
2
O comprimento do barramento de endereço físico é independente de ser um processador de 32 ou 64 bits. Alguns processadores de 32 bits possuem barramentos de endereço maiores que 32 bits e nenhum processador de 64 bits possui um barramento de endereço de 64 bits.
1
Acordado. Em teoria, o espaço de endereço é 2 ^ 64. Na prática, os fabricantes de CPU estão usando valores menores ... como 2 ^ 40 ou 2 ^ 48.
Stu Thompson
5

Cotação do Microsoft.com:

Na tabela a seguir, os recursos máximos aumentados de computadores baseados nas versões de 64 bits do Windows e no processador Intel de 64 bits são comparados com os máximos de recursos de 32 bits existentes.

MS-Table

Mehper C. Palavuzlar
fonte
2
Interessante, mas vale a pena notar que algumas versões de 32 bits do Windows permitem mais memória FÍSICA. Veja, por exemplo, en.wikipedia.org/wiki/…
ChrisInEdmonton 30/10/2009
@ChrisInEdmonton, o sistema suporta mais de 4 GB ou memória, mas o endereço para cada processo ainda é limitado a 2 GB (3 GB com reconhecimento de endereço grande). Portanto, mesmo que seu sistema tenha muita memória, ele ainda não ajuda os programas que possuem muita memória e o desempenho ainda fica abaixo da versão de 64 bits. Além disso, tem muito menor intervalo de endereços para ASLR e memória mapeada arquivo
phuclv
4

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.

Kevin K
fonte
Pode haver menos drivers, mas não é tão ruim quanto isso soa. Estou executando 64 bits desde 2007 e nunca tive dificuldades. Dito isto, não tenho nenhum dispositivo obscuro ou antigo conectado.
19 de
1
A mais recente com o Vista 64 bits foi uma impressora multifuncional HP totalmente nova, no mês passado, em um sistema Dell de 2 meses. Tanto a Dell quanto a HP desistiram, e meu cliente me pagou para usar o XP Pro e me livrar do Vista. Nada obscuro em nenhuma das unidades.
Kevin K
1
Normalmente, se você comprar um computador com sistema operacional de 64 bits, tudo funcionará. Seria cuidadoso antes de tentar atualizar um computador mais antigo, ou se tivesse uma impressora mais antiga ou se gostasse de atualizar por conta própria.
David Thornley
O hardware que deseja brandir o Works com Windows ou Certificado para uso com logotipos do Windows deve oferecer drivers de 64 bits. Talvez procure pela próxima vez. Mas, de fato, às vezes os fornecedores não se preocupam com o hardware do consumidor, pois a maioria dos consumidores provavelmente ainda estará com 32 bits.
Joey
2

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.

Hugh Allen
fonte
2

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

LestiWulan
fonte
1

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.

JB King
fonte
1

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:

  • Ele permitirá que você execute mais de 4 GB de RAM (o número máximo que você pode endereçar em um sistema operacional de 32 bits é 2 ^ 32 = 4 GB)
  • É útil para trabalhar com grandes conjuntos de dados (por exemplo, no Excel) e certas tarefas computacionais intensivas (por exemplo, Photoshop e arquivos grandes)
  • Você pode executar apenas um programa de 64 bits em um sistema operacional de 64 bits, mas pode executar um programa de 32 bits nos dois (lembre-se de que muitos programas são apresentados como ambos, portanto, não há muitos somente de 64 bits programas).

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.

cyberx86
fonte