zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

tlsf.h (2073B)


      1 #ifndef INCLUDED_tlsf
      2 #define INCLUDED_tlsf
      3 
      4 /*
      5 ** Two Level Segregated Fit memory allocator, version 3.0.
      6 ** Written by Matthew Conte, and placed in the Public Domain.
      7 **	http://tlsf.baisoku.org
      8 **
      9 ** Based on the original documentation by Miguel Masmano:
     10 **	http://rtportal.upv.es/rtmalloc/allocators/tlsf/index.shtml
     11 **
     12 ** Please see the accompanying Readme.txt for implementation
     13 ** notes and caveats.
     14 **
     15 ** This implementation was written to the specification
     16 ** of the document, therefore no GPL restrictions apply.
     17 */
     18 
     19 #include <stddef.h>
     20 
     21 #if defined(__cplusplus)
     22 extern "C" {
     23 #endif
     24 
     25 /* tlsf_t: a TLSF structure. Can contain 1 to N pools. */
     26 /* pool_t: a block of memory that TLSF can manage. */
     27 typedef void* tlsf_t;
     28 typedef void* pool_t;
     29 
     30 /* Create/destroy a memory pool. */
     31 tlsf_t tlsf_create(void* mem);
     32 tlsf_t tlsf_create_with_pool(void* mem, size_t bytes);
     33 void tlsf_destroy(tlsf_t tlsf);
     34 pool_t tlsf_get_pool(tlsf_t tlsf);
     35 
     36 /* Add/remove memory pools. */
     37 pool_t tlsf_add_pool(tlsf_t tlsf, void* mem, size_t bytes);
     38 void tlsf_remove_pool(tlsf_t tlsf, pool_t pool);
     39 
     40 /* malloc/memalign/realloc/free replacements. */
     41 void* tlsf_malloc(tlsf_t tlsf, size_t bytes);
     42 void* tlsf_memalign(tlsf_t tlsf, size_t align, size_t bytes);
     43 void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size);
     44 void tlsf_free(tlsf_t tlsf, void* ptr);
     45 
     46 /* Returns internal block size, not original request size */
     47 size_t tlsf_block_size(void* ptr);
     48 
     49 /* Overheads/limits of internal structures. */
     50 size_t tlsf_size();
     51 size_t tlsf_align_size();
     52 size_t tlsf_block_size_min();
     53 size_t tlsf_block_size_max();
     54 size_t tlsf_pool_overhead();
     55 size_t tlsf_alloc_overhead();
     56 
     57 /* Debugging. */
     58 typedef void (*tlsf_walker)(void* ptr, size_t size, int used, void* user);
     59 void tlsf_walk_pool(pool_t pool, tlsf_walker walker, void* user);
     60 /* Returns nonzero if any internal consistency check fails. */
     61 int tlsf_check(tlsf_t tlsf);
     62 int tlsf_check_pool(pool_t pool);
     63 
     64 /* TODO add utilities for
     65  * - Find Unused Pool Chunks
     66  * - Define if the pool is running low
     67  */
     68 
     69 #if defined(__cplusplus)
     70 };
     71 #endif
     72 
     73 #endif