Lines Matching full:heap

30 /* if no heap poisoning, public API aliases directly to these implementations */
31 void *multi_heap_malloc(multi_heap_handle_t heap, size_t size)
34 void *multi_heap_aligned_alloc(multi_heap_handle_t heap, size_t size, size_t alignment)
37 void multi_heap_aligned_free(multi_heap_handle_t heap, void *p)
40 void multi_heap_free(multi_heap_handle_t heap, void *p)
43 void *multi_heap_realloc(multi_heap_handle_t heap, void *p, size_t size)
46 size_t multi_heap_get_allocated_size(multi_heap_handle_t heap, void *p)
52 void multi_heap_get_info(multi_heap_handle_t heap, multi_heap_info_t *info)
55 size_t multi_heap_free_size(multi_heap_handle_t heap)
58 size_t multi_heap_minimum_free_size(multi_heap_handle_t heap)
108 /* Check a block is valid for this heap. Used to verify parameters. */
109 __attribute__((noinline)) NOCLONE_ATTR static void assert_valid_block(const heap_t *heap, const blo… in assert_valid_block() argument
111 pool_t pool = tlsf_get_pool(heap->heap_data); in assert_valid_block()
115 (ptr < pool + heap->pool_size), in assert_valid_block()
124 size_t multi_heap_get_allocated_size_impl(multi_heap_handle_t heap, void *p) in multi_heap_get_allocated_size_impl() argument
133 //Region too small to be a heap. in multi_heap_register_impl()
155 void multi_heap_set_lock(multi_heap_handle_t heap, void *lock) in multi_heap_set_lock() argument
157 heap->lock = lock; in multi_heap_set_lock()
160 void multi_heap_internal_lock(multi_heap_handle_t heap) in multi_heap_internal_lock() argument
162 MULTI_HEAP_LOCK(heap->lock); in multi_heap_internal_lock()
165 void multi_heap_internal_unlock(multi_heap_handle_t heap) in multi_heap_internal_unlock() argument
167 MULTI_HEAP_UNLOCK(heap->lock); in multi_heap_internal_unlock()
170 multi_heap_block_handle_t multi_heap_get_first_block(multi_heap_handle_t heap) in multi_heap_get_first_block() argument
172 assert(heap != NULL); in multi_heap_get_first_block()
173 pool_t pool = tlsf_get_pool(heap->heap_data); in multi_heap_get_first_block()
179 multi_heap_block_handle_t multi_heap_get_next_block(multi_heap_handle_t heap, multi_heap_block_hand… in multi_heap_get_next_block() argument
181 assert(heap != NULL); in multi_heap_get_next_block()
182 assert_valid_block(heap, block); in multi_heap_get_next_block()
199 void *multi_heap_malloc_impl(multi_heap_handle_t heap, size_t size) in multi_heap_malloc_impl() argument
201 if (size == 0 || heap == NULL) { in multi_heap_malloc_impl()
206 multi_heap_internal_lock(heap); in multi_heap_malloc_impl()
207 void *result = tlsf_malloc(heap->heap_data, size); in multi_heap_malloc_impl()
209 heap->free_bytes -= tlsf_block_size(result); in multi_heap_malloc_impl()
210 heap->free_bytes -= tlsf_alloc_overhead(); in multi_heap_malloc_impl()
211 if (heap->free_bytes < heap->minimum_free_bytes) { in multi_heap_malloc_impl()
212 heap->minimum_free_bytes = heap->free_bytes; in multi_heap_malloc_impl()
215 multi_heap_internal_unlock(heap); in multi_heap_malloc_impl()
220 void multi_heap_free_impl(multi_heap_handle_t heap, void *p) in multi_heap_free_impl() argument
222 if (heap == NULL || p == NULL) { in multi_heap_free_impl()
226 assert_valid_block(heap, block_from_ptr(p)); in multi_heap_free_impl()
228 multi_heap_internal_lock(heap); in multi_heap_free_impl()
229 heap->free_bytes += tlsf_block_size(p); in multi_heap_free_impl()
230 heap->free_bytes += tlsf_alloc_overhead(); in multi_heap_free_impl()
231 tlsf_free(heap->heap_data, p); in multi_heap_free_impl()
232 multi_heap_internal_unlock(heap); in multi_heap_free_impl()
235 void *multi_heap_realloc_impl(multi_heap_handle_t heap, void *p, size_t size) in multi_heap_realloc_impl() argument
237 assert(heap != NULL); in multi_heap_realloc_impl()
240 return multi_heap_malloc_impl(heap, size); in multi_heap_realloc_impl()
243 assert_valid_block(heap, block_from_ptr(p)); in multi_heap_realloc_impl()
245 if (heap == NULL) { in multi_heap_realloc_impl()
249 multi_heap_internal_lock(heap); in multi_heap_realloc_impl()
251 void *result = tlsf_realloc(heap->heap_data, p, size); in multi_heap_realloc_impl()
255 heap->free_bytes += previous_block_size; in multi_heap_realloc_impl()
256 heap->free_bytes -= tlsf_block_size(result); in multi_heap_realloc_impl()
257 if (heap->free_bytes < heap->minimum_free_bytes) { in multi_heap_realloc_impl()
258 heap->minimum_free_bytes = heap->free_bytes; in multi_heap_realloc_impl()
262 multi_heap_internal_unlock(heap); in multi_heap_realloc_impl()
267 void *multi_heap_aligned_alloc_impl_offs(multi_heap_handle_t heap, size_t size, size_t alignment, s… in multi_heap_aligned_alloc_impl_offs() argument
269 if(heap == NULL) { in multi_heap_aligned_alloc_impl_offs()
282 multi_heap_internal_lock(heap); in multi_heap_aligned_alloc_impl_offs()
283 void *result = tlsf_memalign_offs(heap->heap_data, alignment, size, offset); in multi_heap_aligned_alloc_impl_offs()
285 heap->free_bytes -= tlsf_block_size(result); in multi_heap_aligned_alloc_impl_offs()
286 heap->free_bytes -= tlsf_alloc_overhead(); in multi_heap_aligned_alloc_impl_offs()
287 if(heap->free_bytes < heap->minimum_free_bytes) { in multi_heap_aligned_alloc_impl_offs()
288 heap->minimum_free_bytes = heap->free_bytes; in multi_heap_aligned_alloc_impl_offs()
291 multi_heap_internal_unlock(heap); in multi_heap_aligned_alloc_impl_offs()
297 void *multi_heap_aligned_alloc_impl(multi_heap_handle_t heap, size_t size, size_t alignment) in multi_heap_aligned_alloc_impl() argument
299 return multi_heap_aligned_alloc_impl_offs(heap, size, alignment, 0); in multi_heap_aligned_alloc_impl()
329 bool multi_heap_check(multi_heap_handle_t heap, bool print_errors) in multi_heap_check() argument
332 assert(heap != NULL); in multi_heap_check()
334 multi_heap_internal_lock(heap); in multi_heap_check()
342 if(tlsf_check(heap->heap_data)) { in multi_heap_check()
346 if(tlsf_check_pool(tlsf_get_pool(heap->heap_data))) { in multi_heap_check()
350 multi_heap_internal_unlock(heap); in multi_heap_check()
363 void multi_heap_dump(multi_heap_handle_t heap) in multi_heap_dump() argument
365 assert(heap != NULL); in multi_heap_dump()
367 multi_heap_internal_lock(heap); in multi_heap_dump()
368 MULTI_HEAP_STDERR_PRINTF("Showing data for heap: %p \n", (void *)heap); in multi_heap_dump()
369 tlsf_walk_pool(tlsf_get_pool(heap->heap_data), multi_heap_dump_tlsf, NULL); in multi_heap_dump()
370 multi_heap_internal_unlock(heap); in multi_heap_dump()
373 size_t multi_heap_free_size_impl(multi_heap_handle_t heap) in multi_heap_free_size_impl() argument
375 if (heap == NULL) { in multi_heap_free_size_impl()
379 return heap->free_bytes; in multi_heap_free_size_impl()
382 size_t multi_heap_minimum_free_size_impl(multi_heap_handle_t heap) in multi_heap_minimum_free_size_impl() argument
384 if (heap == NULL) { in multi_heap_minimum_free_size_impl()
388 return heap->minimum_free_bytes; in multi_heap_minimum_free_size_impl()
408 void multi_heap_get_info_impl(multi_heap_handle_t heap, multi_heap_info_t *info) in multi_heap_get_info_impl() argument
414 if (heap == NULL) { in multi_heap_get_info_impl()
418 multi_heap_internal_lock(heap); in multi_heap_get_info_impl()
419 tlsf_walk_pool(tlsf_get_pool(heap->heap_data), multi_heap_get_info_tlsf, info); in multi_heap_get_info_impl()
423 …info->total_allocated_bytes = (heap->pool_size - tlsf_size(heap->heap_data)) - heap->free_bytes - … in multi_heap_get_info_impl()
424 info->minimum_free_bytes = heap->minimum_free_bytes; in multi_heap_get_info_impl()
425 info->total_free_bytes = heap->free_bytes; in multi_heap_get_info_impl()
426 info->largest_free_block = tlsf_fit_size(heap->heap_data, info->largest_free_block); in multi_heap_get_info_impl()
427 multi_heap_internal_unlock(heap); in multi_heap_get_info_impl()