Распечатка 10.4 Реализация malloc в uClibc с помощью "кучи"

Предыдущая  Содержание  Следующая V*D*V

Распечатка 10.4

 

HEAP_DECLARE_STATIC_FREE_AREA (initial_fa, 256);

struct heap __malloc_heap = HEAP_INIT_WITH_FA (initial_fa);

 

void * malloc(size_t size) {

  …

  …

  mem = malloc_from_heap (size, &__malloc_heap);

  if (unlikely (!mem))

  {

  oom:

    __set_errno (ENOMEM);

    return 0;

  }

  return mem;

}

 

static void *

malloc_from_heap (size_t size, struct heap *heap){

 

  /* Сначала попробуем выделить из области внутренней "кучи" */

  __heap_lock (heap);

 

  mem = __heap_alloc (heap, &size);

 

  __heap_unlock (heap);

 

  /* при неудаче вызываем mmap */

  if (unlikely (! mem)) {

    /* Из "кучи" выделить не смогли, */

    block = mmap (0, block_size, PROT_READ | PROT_WRITE,

                  MAP_SHARED | MAP_ANONYMOUS, 0, 0);

  }

}

Предыдущая  Содержание  Следующая