Quando um processo do Windows fica sem memória?

No Windows Server 2003, Enterprise Edition, SP2 (opção/3GB não ativada)

Pelo que entendi, e posso estar errado, a memória endereçável máxima para um processo é de 4 GB.

São 2 GB de bytes privados e 2 GB de bytes virtuais?

Você recebe erros de "falta de memória" quando o limite de bytes privados ou o limite de bytes virtuais é atingido?

2

6 Respostas

É correto que o espaço de endereçamento máximo de um processo seja de 4GB, em certo sentido. Metade do espaço de endereço é, para cada processo, ocupado pelo sistema operacional. Isso pode ser alterado com a chave de 3 GB, mas pode causar instabilidade no sistema. Então, ficamos com 2 GB de memória endereçável para o processo usar sozinho. Bem, não inteiramente. Acontece que uma parte deste espaço é ocupada por outras coisas, como DLLs, um outro código comum. A memória real disponível para você como programador é de aproximadamente 1,5 GB a 1,7 GB.

Eu não tenho certeza sobre como você pode lidar acidentalmente acima desse limite, mas eu sei de jogos que travam em grandes mapas multiplayer por esse motivo. Outra coisa a notar é que um programa de 32 bits não pode usar mais do que o espaço de endereço de 2 GB em um sistema de 64 bits, a menos que ele ative o sinalizador de vinculador/LARGEADDRESSAWARE: YES.

4
adicionado

A memória endereçável máxima para uma máquina de 32 bits é de 4 GB; para uma máquina de 64 bits, você pode endereçar mais cargas. (Embora algumas máquinas de 32 bits possuam sistemas de extensão para acessar mais, mas eu não acho que isso vale a pena incomodar ou considerar o uso).

Você recebe erros de memória quando o limite virtual é atingido. No Windows Server 2003, o gerenciador de tarefas informa o limite na guia de desempenho denominada 'Commit Charge Limit'.

0
adicionado

O link a seguir explica muito melhor do que eu jamais poderia:

MSDN - CLR Por dentro: investigando problemas de memória

0
adicionado

Em 32 bits, se houver memória física e espaço em disco suficientes para a memória virtual, a memória ficará em torno de 3 GB, já que o kernel reserva o espaço de endereço acima 0xC0000000 para si mesmo. Em um kernel de 64 bits executando um aplicativo de 64 bits, o limite é de 8 TB.

For more details, check out MSDN - Memory Limits for Windows Releases

0
adicionado

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

Enquanto 4 GB é o limite licenciado para SKUs de cliente de 32 bits, o limite efetivo é realmente menor e depende do chipset e dos dispositivos conectados do sistema. A razão é que o mapa endereço físico inclui não apenas RAM, mas a memória do dispositivo, bem como, e sistemas x86 e x64 mapear toda a memória do dispositivo abaixo do limite de endereço de 4GB para permanecer compatível com os sistemas operacionais de 32 bits que não sabem como lidar com endereços maiores que 4 GB. Se um sistema tiver 4 GB de RAM e dispositivos, como adaptadores de vídeo, áudio e rede, implementarem janelas na memória do dispositivo que somam 500 MB, 500 MB dos 4 GB de RAM residirão acima do limite de endereço de 4 GB.

0
adicionado

Você só pode acessar 2Gb de memória no total (sem o switch 3Gb) em plataformas Windows de 32 bits.

Você pode executar várias VMs de 32 bits em um sistema operacional de 64 bits para que cada aplicativo tenha acesso à maior quantidade de memória possível, se a sua máquina tiver mais de 4 GB.

Muitas pessoas estão começando a acertar essas barreiras, eu acho que é mais fácil se o seu aplicativo estiver em .net ou Java, já que as VMs vão até 32GB de memória no sistema operacional de 64 bits.

0
adicionado
Técnicos em Informática
Técnicos em Informática
2 517 dos participantes

Um grupo com foco em assuntos técnicos, hardware, servidores e resolução de problemas em Windows e Linux. Canal: @dicasdeti