Распечатка 10.4 Реализация malloc в uClibc с помощью "кучи" |
Предыдущая Содержание Следующая |
Распечатка 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); } } |
Предыдущая Содержание Следующая |