PRB: Erro no Win32s: R6016 - não há espaço suficiente para os dados do segmento

IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.

Clique aqui para ver a versão em Inglês deste artigo: 126709
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sintomas
Geração e fechar repetidamente um aplicativo tiver êxito em torno de 60 vezes e, em seguida, a geração falha com este erro:
R6016 - não há espaço suficiente para os dados do segmento
Causa
O armazenamento local de thread (TLS) não é liberado pelo sistema.

A falha ocorre somente se houver outro activewhile de aplicativos baseados em Win32 que está fazendo a gera. A mensagem em si não é gerado byWin32s. Ele é gerado pelo Microsoft C Runtime (CRT) librariesLIBC.LIB e LIBCMT. LIB.
Resolução
Win32s versão 1,25, índices TLS são liberados durante a limpeza do módulo. Índice de TheTLS é de propriedade pelo módulo principal do aplicativo, para que ele seja freedwhen, que o aplicativo termina. Isso resolve o problema de andLIBCMT LIBC.

Há um problema similar com MSVCRT20. DLL. DLL esta versão o CRTallocates um novo índice TLS toda vez que um processo anexa a ele. MSVCRT20doesn ' t liberar os índices TLS ao descarregar. O sistema deve liberá-los. Se apenas um aplicativo usa MSVCRT20 ao mesmo tempo, então o podem ser aplicativos gerado com êxito até cerca de 60 vezes em Win32s versão 1.20. OnWin32s versão 1,25, não há nenhuma limitação.

Se já houver um aplicativo ativo que usa MSVCRT20, é notpossible para gerar e fechar um segundo aplicativo que usa MSVCRT20 morethan cerca de 60 vezes em Win32s versão 1,25. Isso ocorre porque MSVCRT20allocates um TLS indexar cada vez que um processo anexa a ele. Win32s será freeall dos índices TLS somente quando MSVCRT20 for descarregado.
Mais Informações
Nos Win32s, alocação de TLS deve ser feita uma vez e não por processo. Eachprocess pode usar o índice para armazenar dados por processo, assim como um threaduses um índice TLS no Windows NT. Isso é fácil, pois DLL isshared de dados entre todos os processos em Win32s.

O exemplo a seguir demonstra como fazer a alocação de TLS uma vez onWin32s:
   BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD fdwReason,           LPVOID lpvReserved)   {       static BOOL fFirstProcess = TRUE;       BOOL fWin32s = FALSE;       DWORD dwVersion = GetVersion();       static DWORD dwIndex;       if ( !(dwVersion & 0x80000000) && LOBYTE(LOWORD(dwVersion))<4 )           fWin32s = TRUE;       if (dwReason == DLL_PROCESS_ATTACH) {           if (fFirstProcess || !fWin32s) {               dwIndex = TlsAlloc();            }            fFirstProcess = FALSE;       }       .       .       .   }				
1.20

Tulajdonságok

Cikkazonosító: 126709 - Utolsó ellenőrzés: 02/10/2016 02:32:00 - Verziószám: 5.0

  • kbmt KB126709 KbMtpt
Visszajelzés