Partilhar via


Funções Globais e Locais

As funções globais e locais são suportadas para portabilidade de código de 16 bits ou para manter a compatibilidade do código-fonte com o Windows de 16 bits. A partir do Windows de 32 bits, as funções globais e locais são implementadas como funções de wrapper que chamam as funções de heap de correspondentes usando um identificador para o heap padrão do processo. Portanto, as funções globais e locais têm maior sobrecarga do que outras funções de gerenciamento de memória.

As funções de heap fornecer mais recursos e controle do que as funções globais e locais. Novos aplicativos devem usar as funções de heap, a menos que a documentação declare especificamente que uma função global ou local deve ser usada. Por exemplo, algumas funções do Windows alocam memória que deve ser liberada com LocalFree e as funções globais ainda são usadas com DDE (Dynamic Data Exchange), as funções da área de transferência e objetos de dados OLE. Para obter uma lista completa de funções globais e locais, consulte a tabela em Memory Management Functions.

O gerenciamento de memória do Windows não fornece um heap local separado e um heap global, como o Windows de 16 bits. Como resultado, as famílias globais e locais de funções são equivalentes e escolher entre elas é uma questão de preferência pessoal. Observe que a mudança de um modelo de memória segmentada de 16 bits para um modelo de memória virtual de 32 bits tornou algumas das funções globais e locais relacionadas e suas opções desnecessárias ou sem sentido. Por exemplo, não há mais ponteiros próximos e distantes, porque as alocações locais e globais retornam endereços virtuais de 32 bits.

Os objetos de memória alocados peloGlobalAlloce LocalAlloc estão em páginas privadas confirmadas com acesso de leitura/gravação que não podem ser acessados por outros processos. A memória alocada usando GlobalAlloc com GMEM_DDESHARE não é realmente compartilhada globalmente como no Windows de 16 bits. Este valor não tem efeito e está disponível apenas para compatibilidade. Os aplicativos que exigem memória compartilhada para outros fins devem usar objetos de mapeamento de arquivo. Vários processos podem mapear uma exibição do mesmo objeto de mapeamento de arquivo para fornecer memória compartilhada nomeada. Para obter mais informações, consulte File Mapping.

As alocações de memória são limitadas apenas pela memória física disponível, incluindo o armazenamento no arquivo de paginação no disco. Quando você aloca memória fixa, GlobalAlloc e LocalAlloc retornar um ponteiro que o processo de chamada pode usar imediatamente para acessar a memória. Quando você aloca memória móvel, o valor de retorno é um identificador. Para obter um ponteiro para um objeto de memória móvel, use o GlobalLock e funções LocalLock.

O tamanho real da memória alocada pode ser maior do que o tamanho solicitado. Para determinar o número real de bytes alocados, use a função GlobalSize ou função LocalSize. Se o valor alocado for maior do que o valor solicitado, o processo pode usar todo o valor.

As funções GlobalReAlloc e LocalReAlloc alteram o tamanho ou os atributos de um objeto de memória alocado por GlobalAlloc e LocalAlloc. O tamanho pode aumentar ou diminuir.

As funções GlobalFree e LocalFree liberam memória alocada por GlobalAlloc, LocalAlloc, GlobalReAllocou LocalReAlloc. Para descartar o objeto de memória especificado sem invalidar o identificador, use o GlobalDiscard ou função LocalDiscard. O identificador pode ser usado posteriormente por GlobalReAlloc ou LocalReAlloc para alocar um novo bloco de memória associado ao mesmo identificador.

Para retornar informações sobre um objeto de memória especificado, use a função GlobalFlags ou LocalFlags. As informações incluem a contagem de bloqueio do objeto e indicam se o objeto é descartável ou já foi descartado. Para retornar um identificador para o objeto de memória associado a um ponteiro especificado, use o GlobalHandle ou função LocalHandle.

Comparando métodos de alocação de memória