A mensagem de erro "Sem Memória" aparece quando existem vários programas em execução

Aplica-se a: Microsoft Windows XP Home EditionMicrosoft Windows XP ProfessionalMicrosoft Windows Server 2003 Datacenter Edition (32-bit x86)

Sintomas


Quando vários programas com base no Windows são executados, aparecem mensagens de erro "Sem Memória" no momento em que você tenta iniciar novos programas ou tenta usar programas que já estão em execução, mesmo que ainda exista bastante memória física e de arquivo de paginação disponível.

Motivo


Esse comportamento poderá ocorrer se o heap de área de trabalho no subsistema WIN32 estiver descarregado.


Observação Este problema ocorre com mais frequência no Windows NT 3.5 porque o tamanho padrão do heap da área de trabalho é de 512K. No Windows NT 3.1, o valor padrão é 3072K. Esse padrão foi reduzido para aumentar o desempenho.

Resolução


Importante Este método, seção ou tarefa contém etapas que informam como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para obter mais proteção, faça backup do Registro antes de modificá-lo. Dessa forma, você poderá restaurar o Registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o Registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
322756 Como fazer o backup e a restauração do Registro no Windows
Para corrigir esse problema, aumente o tamanho do heap de área de trabalho:
  1. Execute o Editor do Registro (Regedt32.exe).
  2. Na subárvore HKEY_LOCAL_MACHINE, acesse a seguinte chave:

    \System\CurrentControlSet\Control\Session Manager\SubSystems
  3. Selecione o valor do Windows
  4. No menu Editar, escolha Cadeia de Caracteres.
  5. Aumente o parâmetro SharedSection.


    Para Windows NT:
    SharedSection especifica os heaps de sistema e de área de trabalho, usando o seguinte formato:
    SharedSection=xxxx,yyyy
    Adicione ",256" ou ",512" depois do número yyyy.

    Para Windows 2000, Windows XP e Windows Server 2003:
    O SharedSection usa o seguinte formato para especificar os heaps de sistema e de área de trabalho:
    SharedSection=xxxx,yyyy,zzzz
    Em sistemas operacionais de 32 bits, aumente o valor de yyyy para "12288";
    Aumente o valor de zzzz para "1024".
    Em sistemas operacionais de 64 bits, aumente o valor de yyyy para "20480";
    Aumente o valor de zzzz para "1024".

Informações adicionais


O Windows NT usa um heap de memória especial para todos os programas com base em Windows em execução na área de trabalho. O heap de área de trabalho é usado para todos os objetos (janelas, menus, canetas, ícones, etc.). Quando vários programas com base em Windows estão em execução, esse heap pode ficar sem memória. Quando não existe memória suficiente para atender a uma solicitação de alocação, o sistema geralmente retorna um erro e notifica o usuário de que ele está ficando sem memória. Alguns programas não manipulam a falha normalmente e, em alguns casos, pode não haver memória suficiente para criar a caixa de diálogo com a mensagem de erro. Como resultado, ocorre uma falha na operação solicitada sem nenhuma indicação.


A chave SharedSection é uma longa seqüência de caracteres quando visualizada com o uso do Editor do Registro. O valor padrão dessa chave é o seguinte.

%SystemRoot%\system32\csrss.exe
ObjectDirectory=\Windows
SharedSection=1024,3072,512
Windows=On
SubSystemType=Windows
ServerDll=basesrv,1
ServerDll=winsrv:GdiServerDllInitialization,4
ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off
MaxRequestThreads=16


O primeiro valor de SharedSection (1024) define o tamanho do heap comum a todas as áreas de trabalho. Ele inclui a tabela de identificadores globais (identificadores do Windows são exclusivos no computador) e configurações de sistema compartilhadas (como SystemMetrics). É muito improvável que você precise alterar esse valor um dia.

O segundo valor de SharedSection (3072) controla o tamanho do heap de área de trabalho associado a uma estação de janela interativa (usada para objetos do Windows). Esse valor estático é usado para impedir que aplicativos inconvenientes consumam muitos recursos. Como o heap de área de trabalho é mapeado para o espaço de endereçamento de cada processo, esse valor não deve ser definido como um valor arbitrariamente alto (pois poderá diminuir o desempenho), podendo apenas ser aumentado o suficiente para possibilitar a execução de todos os aplicativos desejados.

O terceiro valor de SharedSection (512) controla o tamanho do heap de área de trabalho para cada área de trabalho associada a uma estação de janela "não interativa". Se esse valor não estiver presente, o tamanho do heap de estação de trabalho de estações de janela não interativas será igual ao tamanho do heap de estações de janela interativas (o segundo valor de SharedSection).