Compartilhar via


Heaps

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Um heap é uma parte da memória que é reservada para um aplicativo para alocar e livre memória em um por-base byte, ou em um por - 4 - base byte. Um heap pode otimizar memória uso, e ele pode isolar um aplicativo para que ele não precise permitir para a diferente página tamanhos de microprocessadores diferentes. Portanto, um aplicativo pode alocar um bloco em um heap e então ter de OS determinar o número de páginas necessárias para a alocação.

APIs de pilha dependem dos serviços de memória virtual de nível inferior fornecidos pela memória virtual APIs. Memória da pilha é o próximo nível acima memória virtual. Memory allocations in a heap are not made on 64-KB boundaries and are meant for allocations smaller than 16 KB. Qualquer alocação maior que 16 KB faz com que o Heap Management System usar memória virtual diretamente para criar um separar heap para a alocação.

Quando um processo é criado, um heap usar como padrão também é criado para o processo. Um aplicativo pode usar o heap processo para suas alocações memória, e o heap cresce e reduz de acordo. No entanto, desempenho pode ser prejudicado se o tipo de alocações memória em causar o heap usar como padrão o heap para ficar fragmentado e quantidade.

Quando um heap está fragmentado, leva mais tempo para localizar um local para uma nova alocação memória. Para evitar a fragmentação em seu processo, crie separar pilhas de objetos semelhantes. Se um heap existe que contém objetos do mesmo tamanho, o Heap Manager poderá mais facilmente localizar uma livre bloco que é grande o suficiente para armazenar uma nova alocação. No entanto, mesmo que a fragmentação esteja gerenciável através de separar pilhas, há ainda um custo associado com alocar memória.

Windows Embedded CE suporta Alocando apenas não-movable blocos em um heap. Isso simplifica a manipulação de blocos no heap, mas ele pode levar a DoS pilhas se tornar fragmentado sobre tempo à medida que blocos são alocados e liberados. O resultado pode ser um heap que é quase vazio, mas que ainda requer um grande número de páginas virtuais porque o sistema não pode recuperar uma página a partir de heap, a menos que ele seja completamente livre.

Em um design Windows Embedded CE OS, cada aplicativo possui um usar como padrão ou local, heap criado pelo OS quando inicia o aplicativo. Um aplicativo também pode criar qualquer número de separar pilhas. Essas pilhas possuir as mesmas propriedades como o local heap, mas eles são gerenciado por um separar conjunto de funções heap.

Windows Embedded CE usa uma única lista vinculada para todos os blocos heap e usa um algoritmo First-FIT. Blocos livres heap são mesclados ENC em cada alocação ou ciclo livre, e nova alocação sempre começa com o último item alocado ou livre. Essa implementação favorece alocações pequenas porque ele é mais provável que localizar o livre bloco na primeira tentativa. Reutilizando blocos livre geralmente funciona melhor se a alocação ou livre ciclo, vem em como primeiro - na, última - saída (FILO) porque livre blocos são combinados melhor. Usar um heap grande economiza memória virtual, mas é provável que tenham um impacto negativo desempenho. Uma pequena heap é melhor se você tiver um limite tamanho.

Por padrão, Windows Embedded CE inicialmente reserva 64 KB de memória virtual, mas ele confirma as páginas somente conforme eles são alocados. Se o aplicativo aloca more than 64 KB in a local heap, o sistema aloca mais memória virtual usando VirtualAlloc para atender a solicitação de memória. Você pode especificar o tamanho máximo ou inicial quando criar o heap. No entanto, você não pode fazer o heap maior do que o tamanho máximo de você especificar. Fazendo o heap maior pode requerer um separar, espaço de endereço separado que é reservado para o espaço adicional no heap. Seu aplicativo não deve depender de local heap está sendo contida em um único bloco de espaço de endereço virtual.

Para evitar fragmentação de local heap, talvez seja melhor criar um separar heap se você precisar de uma série de blocos memória a ser usado para um tempo especificado. Um exemplo disso é um editor de texto que gerencia um arquivo criando um separar heap para cada arquivo é edição. Como arquivos são abertos e fechados, as Pilhas são criadas e destruídas.

Observação

Windows Embedded CE suporta o mesmo codificar para pilhas quantos área de trabalho Windows-Based plataformas.A diferença importante apenas que Windows Embedded CE não suporte o HEAP_GENERATE_ EXCEPTIONS sinalizador.

Para reduzir o impacto sobre Alocando memória heap, um processo deve alocar memória heap antes de prosseguir com processamento normal, usando HeapAlloc. Em geral, O VirtualAlloc Deve ser usado, rather than chamado HeapAlloc diretamente, pois O VirtualAlloc deprecates direcionar chamadas heap.

Windows Embedded CE heaps trabalho melhor para fixa-tamanho itens. Para otimizar heap uso, verifique sua alocação heap como uniforme possível. Se não, você pode criar separar pilhas para intervalos tamanho diferente.

See Also

Concepts

Memory Architecture

Other Resources

Memory Management Reference
HeapAlloc