, .
glibc, , , .
void fREe(Void_t* mem)
{
arena *ar_ptr;
mchunkptr p;
if (__free_hook != NULL) {
(*__free_hook)(mem, NULL);
}
if (mem == 0)
return;
p = mem2chunk(mem);
if (chunk_is_mmapped(p))
{
munmap_chunk(p);
return;
}
ar_ptr = arena_for_ptr(p);
chunk_free(ar_ptr, p);
(void)mutex_unlock(&ar_ptr->mutex);
}