Dados da Biblioteca Dynamic-Link
Uma biblioteca Dynamic-Link (DLL) pode conter dados globais ou dados locais.
Âmbito Variável
As variáveis que são declaradas como globais em um arquivo de código-fonte DLL são tratadas como variáveis globais pelo compilador e vinculador, mas cada processo que carrega uma determinada DLL obtém sua própria cópia das variáveis globais dessa DLL. O escopo das variáveis estáticas é limitado ao bloco no qual as variáveis estáticas são declaradas. Como resultado, cada processo tem sua própria instância das variáveis globais e estáticas da DLL por padrão.
Observação
Suas ferramentas de desenvolvimento podem permitir que você substitua o comportamento padrão. Por exemplo, o compilador Visual C++ suporta #pragma seção e o vinculador suporta a opção /SECTION. Para obter mais informações, consulte a documentação incluída com suas ferramentas de desenvolvimento.
Alocação dinâmica de memória
Quando uma DLL aloca memória usando qualquer uma das funções de alocação de memória (GlobalAlloc, LocalAlloc, HeapAlloce VirtualAlloc), a memória é alocada no espaço de endereço virtual do processo de chamada e é acessível apenas para os threads desse processo.
Uma DLL pode usar o mapeamento de arquivos para alocar memória que pode ser compartilhada entre processos. Para obter uma discussão geral sobre como usar o mapeamento de arquivos para criar memória compartilhada nomeada, consulte File Mapping. Para obter um exemplo que usa a função DllMain para configurar a memória compartilhada usando o mapeamento de arquivos, consulte Usando memória compartilhada em uma biblioteca de Dynamic-Link.
Armazenamento local de threads
As funções de armazenamento local de thread (TLS) permitem que uma DLL aloque um índice para armazenar e recuperar um valor diferente para cada thread de um processo multithreaded. Por exemplo, um aplicativo de planilha pode criar uma nova instância do mesmo thread cada vez que o usuário abre uma nova planilha. Uma DLL que fornece as funções para várias operações de planilha pode usar TLS para salvar informações sobre o estado atual de cada planilha (linha, coluna e assim por diante). Para obter uma discussão geral sobre armazenamento local de thread, consulte Thread Local Storage. Para obter um exemplo que usa a função DllMain para configurar o armazenamento local de thread, consulte Usando o armazenamento local de thread em uma biblioteca de Dynamic-Link.
Windows Server 2003 e Windows XP: O compilador do Visual C++ oferece suporte a uma sintaxe que permite declarar variáveis thread-local: _declspec(thread). Se você usar essa sintaxe em uma DLL, não poderá carregá-la explicitamente usando LoadLibrary ou LoadLibraryEx em versões do Windows anteriores ao Windows Vista. Se sua DLL será carregada explicitamente, você deve usar as funções de armazenamento local thread em vez de _declspec(thread).