Artigo 32-bit vs 64-bit e os 4GB de memória.

syqe

Power Member
Pelo fórum (e internet) a dentro vejo várias vezes utilizadores cometerem o mesmo erro informando outros utilizadores com frases:

"Vai para 64-bit que a versão 32-bit só detecta 3,2 GB de ram.", como esta existem as variantes 3,5 / 3,75 / 3,25.

Ora isto é um enorme erro.
1) O Processador
Quando se fala de um processador ser de 32-bit ou 64-bit, isto indica-nos o número de bits que o processador consegue utilizar para efectuar cálculos.

É a dimensão da palavra de instrução do CPU.

Essa palavra pode ser usada para cálculos (indicação de constantes, como o número 10: 00000000000000000000000000000101) ou endereços de memória/dispositivos que funcionem por interrupções, que também serão constantes numéricas.

Esta dimensão da palavra contempla também os acessos à memória RAM. Daí os processadores terão 32 bits ou 64 bits para aceder à memória RAM.

Assim, facilmente se observa que 2^32 = 4294967296 posições de memória. Dado que cada posição de memória é constituida por 8 bits = 1 byte teremos os 4294967296 bytes de memória para endereçar.

Efectuando algumas conversões:
4294967296 B = 4194304 KB = 4096 MB = 4 GB

Daqui podemos concluir que o limite de memória para 32 bits é 4 GB.

Já para 64-bits: 2^64 = 18446744073709551616 B = 18014398509481984 KB = 17592186044416 MB = 17179869184 GB = 16777216 TB = 16384 PB = 16 EB.

Isto são 16 ExaBytes de memória.


Tão depressa este não vai ser um bottleneck.
2) Outros endereçamentos
Já provamos que o limite dos 32-bit são 4GB então porquê de nalguns SO's apenas mostrar 3 / 3,2 / 3,5 GB de RAM?

Isto deve-se que dentro destes 4 GB de memória "visível" ao processador também estão incluídos todos os endereçamentos do hardware da máquina, incluindo, obviamente, a memória da placa gráfica.
Escusado será dizer que com o aumento gradual deste tipo de memória, cada vez mais se vêm casos de RAM "que não aparece".

Logo se existem endereços que estão a ser reservados para outro hardware, menos endereços sobram para o endereçamento de memória RAM, já não tendo o processador os 2^32 para calculo, mas sim 2^32 menos o número bits utilizados em endereços reservados para o outro hardware.
3) Sistema Operativo
Os factos apresentados anteriormente dizem referência à arquitectura do sistema, e não ao SO em si.

Logo isto será aplicado a qualquer SO 32-bit seja Vista, XP ou qualquer distribuição de Linux.

Digo isto porque também já li pessoas a dizerem que isto apenas se aplicaria no Vista, ou ao contrário. Ora isto não faz sentido.

Se quiserem ter acesso total aos 4GB de memória ou mais terão que ter um SO 64-bit.

4) Para além da memória
O facto de o processador passar a ter capacidade para trabalhar com 4+ GB de memória RAM, não é a única vantagem de utilizar uma arquitectura 64-bit, como já disse mais atrás estes 64-bit são utilizados para todos os cálculos do processador.

Numa arquitectura 32-bit se um calculo ultrapassar o número 4294967296 este terá que ser dividido em dois cálculos, logo mais trabalho para o processador.

Assim em 64-bit este calculo seria feito apenas de uma vez. Obviamente isto só será aplicado se o SO e a aplicação em questão forem 64-bit.

Isto porque em Windows, utilizando a tecnologia WoW64 (Windows on Windows 64) é possível correr aplicações 32-bit num SO 64-bit.


Se detectarem erros agradeço que mos identifiquem e corrigirei assim que possível.
 
Última edição:
Se quiserem ter acesso total aos 4GB de memória ou mais terão que ter um SO 64-bit.

Não é necessariamente verdade. Se o hardware (processador, chipset...) e o sistema operativo suportarem Physical Address Extension (PAE) é possível aceder até um máximo teórico de 64Gb de memória, já que o endereçamento passa a ser feito com 36 bits em vez de com 32 bits.

Por outro lado, também é preciso não esquecer que correr um SO e aplicações em 64 bits também tem desvantagens. São precisos 64 bits em vez de 32 para aceder a qualquer coisa que esteja em RAM, o que faz com que caibam menos coisas na cache do processador de cada vez. E isso nem sempre compensa...
 
Eu só não percebo (mesmo!) porque é que 2^32 bits equivale a 4 GigaBytes e não 4 Gigabits

Isto porque 1 Byte = 8 bit, logo a conta devia ser:

2^32 bits/(1024³) = 4 Gigabits
2^32 bits/(1024³*8) = 0.5 GigaBytes


Quando se fala de um processador ser de 32-bit ou 64-bit, isto indica-nos o número de bits que o processador consegue utilizar para efectuar cálculos.

É a dimensão da palavra de instrução do CPU. Essa palavra pode ser usada para cálculos (indicação de constantes, como o número 10: 00000000000000000000000000000101) ou endereços de memória/dispositivos que funcionem por interrupções, que também serão constantes numéricas.

Logo se existem bits que estão a ser reservados para estes endereçamentos, menos bits sobram para o endereçamento de memória RAM, já não tendo o processador os 32 bits para calculo, mas sim 32 menos o número de bits reservados para endereçamento de outro hardware.

Não são bits que são reservados, são endereços, cada um correspondente a um conjunto de 32/64 bits.

Se 'tirasses um bit' apenas para um dispositivo esse dispositivo ficava com 2^31 endereços reservados (2GB) - bit mais/menos significativo a 0, por exemplo - e apenas ficariam disponíveis outros tantos - bit mais/menos significativo a 1.

Ou seja, o dispositivo ficavam com os endereços 0xxxxxxxxx(...)x e o SO com 1xxxxxxxxx(...)x.

x designa 0 ou 1 (chama-se um don't care bit :p).
 
WindWalker... quando à questão dois 4 Gigabits... nunca tinha pensado nisso. Mas estou a pensar que possa a explicação possa ser a seguinte (mas não tenho a certeza):

1. Com 2^32 ficas com 4294967296 endereços
2. Cada um desses endereços vai referenciar 1 Byte de memória
3. Logo vais ter 4294967296 Bytes no total
4. 4294967296 Bytes = 4194304 KBytes = 4096 MBytes = 4GBytes

Será que isto está correcto?
 
Eu só não percebo (mesmo!) porque é que 2^32 bits equivale a 4 GigaBytes e não 4 Gigabits

Isto porque 1 Byte = 8 bit, logo a conta devia ser:

2^32 bits/(1024³) = 4 Gigabits
2^32 bits/(1024³*8) = 0.5 GigaBytes

Estás a ver a coisa mal. No x86 existem 2^32 posições de memória, e cada uma dessas posições de memória armazena 8 bits (1 byte).

Ou seja, tens 4 giga (2^32) posições de memória, cada uma com tamanho 1 byte. Logo, no total tens 4gigabytes de memória.

Hope it helps! :)
 
Não esquecer que na verdade tudo o que existe num pc ocupa os ditos endereços disponíveis.

Desde placas de rede, placas de som, bus pci, bus usb, memorias flash das placas de graficas para guardar o firmware, bios, relógio de sistema, etc...


Para além disto é necessário pensar que alguns dispositivos mais antigos utilizam endereços fixos, do genero scanners, modems, etc...

Para além de se ter um CPU de 64 bits, é necessário que a board suporte os 64 bits de endereçamento. Não só a nível de hardware mas também a nível de software, a bios.

Umas quantas boards antigas (nomeadamente da Asus) embora não permitam endereçamento superior a 4GB de RAM fazem um truque com a forma como mapeam os dispositivos, permitindo assim que um sistema de 32 bits a nível de hardware tenham algo proximo dos 4GB de ram disponiveis mesmo tendo outros dispositivos. Hoje em dia truques desse genero já não são necessários...
 
O PAE nem sempre é boa opção, pois há aplicações e sistemas que ficam bastante instaveis com o mesmo activo...

Pessoalmente de agora em diante com >=3Gb de Ram, deveriam ser usados SOs de 64bits
 
Eu tenho 4GB e testar ao limite do sistema Windows 7 e ele detecta os 4GB mas só disponível 3.2GB e só activa a PAE quando chega ao limite máximo de utilização pelo sistema em automático.
 
Eu só não percebo (mesmo!) porque é que 2^32 bits equivale a 4 GigaBytes e não 4 Gigabits

Isto porque 1 Byte = 8 bit, logo a conta devia ser:

2^32 bits/(1024³) = 4 Gigabits
2^32 bits/(1024³*8) = 0.5 GigaBytes




É a dimensão da palavra de instrução do CPU. Essa palavra pode ser usada para cálculos (indicação de constantes, como o número 10: 00000000000000000000000000000101) ou endereços de memória/dispositivos que funcionem por interrupções, que também serão constantes numéricas.



Não são bits que são reservados, são endereços, cada um correspondente a um conjunto de 32/64 bits.

Se 'tirasses um bit' apenas para um dispositivo esse dispositivo ficava com 2^31 endereços reservados (2GB) - bit mais/menos significativo a 0, por exemplo - e apenas ficariam disponíveis outros tantos - bit mais/menos significativo a 1.

Ou seja, o dispositivo ficavam com os endereços 0xxxxxxxxx(...)x e o SO com 1xxxxxxxxx(...)x.

x designa 0 ou 1 (chama-se um don't care bit :p).


Estás a ver a coisa mal. No x86 existem 2^32 posições de memória, e cada uma dessas posições de memória armazena 8 bits (1 byte).

Ou seja, tens 4 giga (2^32) posições de memória, cada uma com tamanho 1 byte. Logo, no total tens 4gigabytes de memória.

Hope it helps! :)

Corrigido e adicionado, por favor confirmem que está correcto.

Quanto ao PAE, admito que não estou totalmente dentro. Se alguém quiser escrever algo, terei todo o gosto em adicionar. No entretanto vou ler sobre o assunto para me inteirar e começar a escrever também.
 
Referenciar 2 casos praticos em que tenho acesso e vi ganhos largos em usar uma versao 64bits do executavel foram em:

Winrar 3.90beta 64bits: Descompactação francamente mais rapida em ficheiros grandes 4gigas ou mais.

Crysis Warhead Client 64bits: FPS +/- iguais mas menus hickups.
 
Eu tenho outra questão sobre o SO de 64 bits.

As aplicações não consomem mais memória? É que as aplicações passam a reservar 64 bits de espaço para as variáveis, o dobro de quando são programas 32 bits.
 
Eu tenho 4GB e testar ao limite do sistema Windows 7 e ele detecta os 4GB mas só disponível 3.2GB e só activa a PAE quando chega ao limite máximo de utilização pelo sistema em automático.

Seja Vista, seja XP, 7, Linux, OS X, etc, todos eles detectam os 4GB. Não quer dizer é que os possas usar, naturalmente.
 
Na secção de para além da memória falta um ponto importante que é o facto de o número de ambos os general purpose registers e XMM registers (SSE) terem aumentado de 8 para 16.
 
Back
Topo