O pedaço do deserto pode estar ocupado?

1

Estou curioso sobre um aspecto do gerenciamento de heap no linux, e particularmente na compilação do glibc 2.17. do ubuntu.

Eu entendo que o último fragmento em cada heap, o pedaço superior ou deserto, tende a ser livre, e recebe bits extraídos dele e adicionado a ele e tem seu tamanho alterado com sbrk() quando necessário (se for o caso primeiro heap?).

No entanto, o que não consigo encontrar é o seguinte: é possível que o fragmento de wilderness seja alocado, o que significa que o maior pedaço do heap está ocupado?

A diferença pode parecer apenas de interesse teórico, mas tem algumas implicações relacionadas a se é possível ou não analisar um heap na memória sem metadados externos.

    
por Falcon Momot 06.07.2013 / 22:09

1 resposta

1

Eu não sei a implementação da glibc, mas no malloc de Doug Lea a resposta é "não ". Cite o link:

treat the wilderness chunk as ''bigger'' than all others, since it can be made so (up to system limitations) and use it as such in a best-first scan. This results in the wilderness chunk always being used only if no other chunk exists, further avoiding preventable fragmentation.

Eu acho que há um caso em que a invariante pode ser tecnicamente violada: se o usuário alocou um pedaço que era exatamente o tamanho de toda a memória restante do sistema.

Há uma discussão mais aprofundada sobre como o deserto deve ser gerenciado em Wilson; Johnstone; Neely; Boles: "Alocação Dinâmica de Armazenamento: Uma Pesquisa e Revisão Crítica", Wkshp Internacional em Gerenciamento de Dados , 1995 .

    
por 07.07.2013 / 15:55

Tags