docs/Writerside/topics/allocator.h.md

changeset 1318
12fa1d37fe48
parent 1210
2ad0cf0f314b
child 1319
aa1f580f8f59
equal deleted inserted replaced
1317:eeb2fc3850e2 1318:12fa1d37fe48
2 2
3 The allocator interface provides a mechanism to implement own custom allocators 3 The allocator interface provides a mechanism to implement own custom allocators
4 that can also be used in many other function in UCX. 4 that can also be used in many other function in UCX.
5 5
6 A default allocator implementation using the stdlib functions is 6 A default allocator implementation using the stdlib functions is
7 available via the global symbol `cxDefaultAllocator` 7 available via the global symbol `cxStdlibAllocator`,
8 and UCX also provides a [memory pool](mempool.h.md) implementation. 8 and UCX also provides a [memory pool](mempool.h.md) implementation.
9 You are free to add additional own custom implementations. 9 You are free to add your additional, own custom implementations.
10 A general sketch that illustrates how to do this can be found [below](#custom-allocator). 10 A general sketch that illustrates how to do this can be found [below](#custom-allocator).
11
12 ## Default Allocator
13
14 The global default allocator which is used by UCX,
15 when no specific allocator is specified,
16 can be configured via the `cxDefaultAllocator`.
17 It is by default set to the `cxStdlibAllocator`.
11 18
12 ## Overview 19 ## Overview
13 20
14 ```C 21 ```C
15 #include <cx/allocator.h> 22 #include <cx/allocator.h>
34 int cx_reallocate(void **mem, size_t size); 41 int cx_reallocate(void **mem, size_t size);
35 42
36 int cx_reallocatearray(void **mem, size_t nmemb, size_t size); 43 int cx_reallocatearray(void **mem, size_t nmemb, size_t size);
37 44
38 // predefined allocator that uses stdlib functions 45 // predefined allocator that uses stdlib functions
39 CxAllocator *cxDefaultAllocator; 46 CxAllocator * const cxStdlibAllocator;
47
48 // default allocator that can be changed
49 CxAllocator *cxDefaultAllocator = cxStdlibAllocator;
40 ``` 50 ```
41 51
42 > All UCX functions that are not _explicitly_ designed for taking an allocator argument 52 > All UCX functions that are not _explicitly_ designed for taking an allocator argument
43 > (recognizable by a `_a` suffix in the function's name) do support a `NULL` argument 53 > (recognizable by a `_a` suffix in the function's name) do support a `NULL` argument
44 > in which case the `cxDefaultAllocator` will be used. 54 > in which case the `cxDefaultAllocator` will be used.
55 >
56 > You may change the default allocator at any time, but it is strongly recommended to
57 > do it only once at program start to avoid accidentally freeing memory that was
58 > allocated by a different allocator.
45 59
46 ## Description 60 ## Description
47 61
48 The functions `cxMalloc()`, `cxCalloc()`, `cxRealloc()`, `cxReallocArray()`, and `cxFree()` 62 The functions `cxMalloc()`, `cxCalloc()`, `cxRealloc()`, `cxReallocArray()`, and `cxFree()`
49 invoke the memory management functions specified in the `allocator` and should behave like 63 invoke the memory management functions specified in the `allocator` and should behave like

mercurial