O que acontece quando um programa de 32 bits (executado em uma máquina de 64 bits) atinge o limite de memória?

1

Eu costumo ter algumas centenas de abas no meu navegador (Pale Moon x86), freqüentemente pressionando o uso de memória do programa para até 2-3GB.

O que acontece quando um programa está correndo contra o limite de memória? O sistema continua alimentando sua memória, mas "agora" na forma de troca de disco? O programa "sabe" que atingiu o limite de memória do sistema?

Foi apenas recentemente que tive o lampejo de uma visão (simplista) do porquê o navegador não continua crescendo em tamanho de memória além dele, e começa a funcionar com desempenho péssimo - espaço de memória de 32/64 bits !

Então, comecei a usar o Waterfox, uma variante x64. Será que um programa x64 continuará crescendo na quantidade de uso de memória, até que o sistema diga "não mais"?

    
por Coldblackice 27.06.2012 / 17:32

3 respostas

6

What happens when a 32 bit program (running on an 64 bit machine) hits the memory limit?

A mesma coisa que acontece em um sistema de 32 bits: o programa falha de alguma forma.

No que diz respeito ao programa de 32 bits, o "universo" consiste em até 4 GB de dados. Ele não sabe sobre a área maior fora de sua própria pequena caixa (pense na analogia do peixe que Michio Kaku usa em seu livro Hiperespaço ).

Se você abrir muitas abas e forçar o uso da memória, ele preencherá o universo e, quando acabar, reclamará que não tem memória suficiente para abrir uma nova aba ou exibir uma imagem ou algo parecido. Bem, vai reclamar se estiver bem escrito; se for mal escrito, então ele irá falhar.

Pense nisso de um ponto de vista de programação de baixo nível. O programa de 32 bits usa ponteiros de 32 bits para armazenar os dados. Isso significa que pode indicar no máximo 4 GB de dados. Se ele já usou 4GB, então, mesmo que o sistema operacional possa dar mais, qual seria o valor do novo ponteiro? O novo endereço seria muito distante e o programa não seria capaz de colocar um endereço tão grande em um ponteiro de 32 bits.

Como analogia, pense nos números de telefone. Digamos que na sua cidade, não há muitas pessoas, portanto, seus números de telefone têm 5 dígitos, permitindo até 10.000 números, portanto, todos os catálogos de endereços têm até 10.000 espaços para números de telefone. O país, no entanto, tem muitas pessoas, por isso usa números de 7 dígitos. Mesmo que o país possa lhe dar o número de uma pessoa distante, você não poderá armazená-lo em seu catálogo de endereços porque você só tem 5 dígitos de espaço para imprimir números. depois de imprimir 10.000 números, o livro está completamente cheio.

    
por 27.06.2012 / 17:50
2

Um aplicativo de 32 bits possui apenas um espaço de endereçamento de 32 bits, mesmo em um sistema de 64 bits, portanto, não há como usar mais de 4 GB de memória virtual (e provavelmente significativamente menos que isso). Um aplicativo de 64 bits possui um espaço de endereçamento muito maior e, portanto, pode usar mais memória virtual. Mas há apenas muita memória RAM e, quando está cheia, os dados vão para o arquivo de paginação, o que desacelera todo o sistema (geralmente de forma dramática).

    
por 27.06.2012 / 17:45
2

Quando um programa de 32 bits começa a se aproximar do limite de memória virtual (espaço de endereço), suas alocações de memória começarão a falhar. Cada alocação de memória que o processo faz requer espaço de endereço contíguo disponível suficiente no espaço de memória virtual do processo e, para um processo de 32 bits, é de 4 GB. No Windows 7, os limites de 2 GB e 3 GB não se aplicam a programas de 32 bits em um sistema operacional de 64 bits, se eles tiverem reconhecimento de endereço grande. (Que todo programa moderno significativo deve ser.)

O que o processo faz quando suas alocações de memória falham depende dele. Normalmente, o programa tentará espremer o uso de memória jogando fora tudo que não precisar, desmapeando arquivos que não estava usando e assim por diante. Mas, em última análise, simplesmente terá que se recusar a fazer as coisas.

Alguns programas implementam formas de paginação onde eles escrevem estruturas para um arquivo para lê-las novamente mais tarde. Eles ficarão na RAM o tempo todo, mas isso ainda será mais lento devido à necessidade de manipular os mapeamentos.

    
por 27.06.2012 / 17:47