void* BrotliAllocate(MemoryManager* m, size_t n) { void* result = m->alloc_func(m->opaque, n); if (!result) {
m->is_oom = BROTLI_TRUE; return NULL;
} if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);
m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result; return result;
}
void BrotliFree(MemoryManager* m, void* p) { if (!p) return;
m->free_func(m->opaque, p); if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
}
void BrotliWipeOutMemoryManager(MemoryManager* m) {
size_t i;
CollectGarbagePointers(m); /* Now all unfreed pointers are in perm-allocated list. */ for (i = 0; i < m->perm_allocated; ++i) {
m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
}
m->perm_allocated = 0;
}
void BrotliBootstrapFree(void* address, MemoryManager* m) { if (!address) { /* Should not happen! */ return;
} else { /* Copy values, as those would be freed. */
brotli_free_func free_func = m->free_func; void* opaque = m->opaque;
free_func(opaque, address);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.