git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / lightrec / tlsf / README.md
1 # tlsf
2 Two-Level Segregated Fit memory allocator implementation.
3 Written by Matthew Conte (matt@baisoku.org).
4 Released under the BSD license.
5
6 Features
7 --------
8   * O(1) cost for malloc, free, realloc, memalign
9   * Extremely low overhead per allocation (4 bytes)
10   * Low overhead per TLSF management of pools (~3kB)
11   * Low fragmentation
12   * Compiles to only a few kB of code and data
13   * Support for adding and removing memory pool regions on the fly
14
15 Caveats
16 -------
17   * Currently, assumes architecture can make 4-byte aligned accesses
18   * Not designed to be thread safe; the user must provide this
19
20 Notes
21 -----
22 This code was based on the TLSF 1.4 spec and documentation found at:
23
24         http://www.gii.upv.es/tlsf/main/docs
25
26 It also leverages the TLSF 2.0 improvement to shrink the per-block overhead from 8 to 4 bytes.
27
28 History
29 -------
30 2016/04/10 - v3.1
31   * Code moved to github
32   * tlsfbits.h rolled into tlsf.c
33   * License changed to BSD
34
35 2014/02/08 - v3.0
36   * This version is based on improvements from 3DInteractive GmbH
37   * Interface changed to allow more than one memory pool
38   * Separated pool handling from control structure (adding, removing, debugging)
39   * Control structure and pools can still be constructed in the same memory block
40   * Memory blocks for control structure and pools are checked for alignment
41   * Added functions to retrieve control structure size, alignment size, min and max block size, overhead of pool structure, and overhead of a single allocation
42   * Minimal Pool size is tlsf_block_size_min() + tlsf_pool_overhead()
43   * Pool must be empty when it is removed, in order to allow O(1) removal
44
45 2011/10/20 - v2.0
46   * 64-bit support
47   * More compiler intrinsics for ffs/fls
48   * ffs/fls verification during TLSF creation in debug builds
49
50 2008/04/04 - v1.9
51   * Add tlsf_heap_check, a heap integrity check
52   * Support a predefined tlsf_assert macro
53   * Fix realloc case where block should shrink; if adjacent block is in use, execution would go down the slow path
54
55 2007/02/08 - v1.8
56   * Fix for unnecessary reallocation in tlsf_realloc
57
58 2007/02/03 - v1.7
59   * tlsf_heap_walk takes a callback
60   * tlsf_realloc now returns NULL on failure
61   * tlsf_memalign optimization for 4-byte alignment
62   * Usage of size_t where appropriate
63
64 2006/11/21 - v1.6
65   * ffs/fls broken out into tlsfbits.h
66   * tlsf_overhead queries per-pool overhead
67
68 2006/11/07 - v1.5
69   * Smart realloc implementation
70   * Smart memalign implementation
71
72 2006/10/11 - v1.4
73   * Add some ffs/fls implementations
74   * Minor code footprint reduction
75
76 2006/09/14 - v1.3
77   * Profiling indicates heavy use of blocks of size 1-128, so implement small block handling
78   * Reduce pool overhead by about 1kb
79   * Reduce minimum block size from 32 to 12 bytes
80   * Realloc bug fix
81
82 2006/09/09 - v1.2
83   * Add tlsf_block_size
84   * Static assertion mechanism for invariants
85   * Minor bugfixes 
86
87 2006/09/01 - v1.1
88   * Add tlsf_realloc
89   * Add tlsf_walk_heap
90
91 2006/08/25 - v1.0
92   * First release