Compartilhar via


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

Veja a seguir uma breve comparação dos vários métodos de alocação de memória:

Embora as funções GlobalAlloc, LocalAlloc e HeapAlloc aloquem memória do mesmo heap, cada uma fornece um conjunto ligeiramente diferente de funcionalidade. Por exemplo, HeapAlloc pode ser instruído a gerar uma exceção se a memória não puder ser alocada, uma funcionalidade não disponível com LocalAlloc. LocalAlloc dá suporte à alocação de identificadores que permitem que a memória subjacente seja movida por uma realocação sem alterar o valor do identificador, uma funcionalidade não disponível com HeapAlloc.

A partir do Windows de 32 bits, GlobalAlloc e LocalAlloc são implementados como funções wrapper que chamam HeapAlloc usando um identificador para o heap padrão do processo. Portanto, GlobalAlloc e LocalAlloc têm maior sobrecarga do que HeapAlloc.

Como os diferentes alocadores de heap fornecem funcionalidade distinta usando mecanismos diferentes, você deve liberar memória com a função correta. Por exemplo, a memória alocada com HeapAlloc deve ser liberada com HeapFree e não LocalFree ou GlobalFree. A memória alocada com GlobalAlloc ou LocalAlloc deve ser consultada, validada e liberada com a função global ou local correspondente.

A função VirtualAlloc permite que você especifique opções adicionais para alocação de memória. No entanto, suas alocações usam uma granularidade de página, portanto, o uso de VirtualAlloc pode resultar em maior uso de memória.

A função malloc tem a desvantagem de ser dependente do tempo de execução. O novo operador tem a desvantagem de ser dependente do compilador e dependente da linguagem.

A função CoTaskMemAlloc tem a vantagem de funcionar bem em C, C++ou Visual Basic. Também é a única maneira de compartilhar memória em um aplicativo baseado em COM, já que MIDL usa CoTaskMemAlloc e CoTaskMemFree para realizar marshaling de memória.

Exemplos

Funções globais e locais

Funções heap

Funções de memória virtual