Partilhar via


Escopo da memória alocada

Toda a memória que um processo aloca usando as funções de alocação de memória ( HeapAlloc, VirtualAlloc, GlobalAllocou LocalAlloc) é acessível apenas ao processo. No entanto, a memória alocada por uma DLL é alocada no espaço de endereço do processo que chamou a DLL e não é acessível a outros processos usando a mesma DLL. Para criar memória compartilhada, você deve usar o mapeamento de arquivos.

O mapeamento de arquivos nomeados fornece uma maneira fácil de criar um bloco de memória compartilhada. Um processo pode especificar um nome quando usa a funçãoCreateFileMapping para criar um objeto de mapeamento de arquivo. Outros processos podem especificar o mesmo nome para o CreateFileMapping ou função OpenFileMapping para obter um identificador para o objeto de mapeamento.

Cada processo especifica seu identificador para o objeto de mapeamento de arquivo na funçãoMapViewOfFilepara mapear uma exibição do arquivo em seu próprio espaço de endereço. As exibições de todos os processos para um único objeto de mapeamento de arquivo são mapeadas nas mesmas páginas compartilháveis de armazenamento físico. No entanto, os endereços virtuais das exibições mapeadas podem variar de um processo para outro, a menos que a função MapViewOfFileEx seja usada para mapear a exibição em um endereço especificado. Embora compartilháveis, as páginas de armazenamento físico usadas para uma exibição de arquivo mapeado não são globais; eles não são acessíveis a processos que não mapearam uma exibição do arquivo.

Todas as páginas confirmadas pelo mapeamento de uma exibição de um arquivo são liberadas quando o último processo com uma exibição do objeto de mapeamento termina ou desmapeia sua exibição chamando a funçãoUnmapViewOfFile. Neste momento, o arquivo especificado (se houver) associado ao objeto de mapeamento é atualizado. Um arquivo especificado também pode ser forçado a atualizar chamando a funçãoFlushViewOfFile.

Para obter mais informações, consulte File Mapping. Para obter um exemplo de memória compartilhada em uma DLL, consulte Usando memória compartilhada em uma biblioteca de Dynamic-Link.

Se vários processos tiverem acesso de gravação à memória compartilhada, você deverá sincronizar o acesso à memória. Para obter mais informações, consulte de sincronização .