|
1 # allocator.h |
|
2 |
|
3 The UCX allocator provides an interface for implementing an own memory allocation mechanism. |
|
4 Various function in UCX provide an additional alternative signature that takes an allocator as |
|
5 argument. A default allocator implementation using the stdlib memory management functions is |
|
6 available via the global symbol `cxDefaultAllocator`. |
|
7 |
|
8 If you want to define your own allocator, you need to initialize the `CxAllocator` structure |
|
9 with a pointer to an allocator class (containing function pointers for the memory management |
|
10 functions) and an optional pointer to an arbitrary memory region that can be used to store |
|
11 state information for the allocator. An example is shown below: |
|
12 |
|
13 ```c |
|
14 struct my_allocator_state { |
|
15 size_t total; |
|
16 size_t avail; |
|
17 char mem[]; |
|
18 }; |
|
19 |
|
20 static cx_allocator_class my_allocator_class = { |
|
21 my_malloc_impl, |
|
22 my_realloc_impl, // all these functions are somewhere defined |
|
23 my_calloc_impl, |
|
24 my_free_impl |
|
25 }; |
|
26 |
|
27 CxAllocator create_my_allocator(size_t n) { |
|
28 CxAllocator alloc; |
|
29 alloc.cl = &my_allocator_class; |
|
30 alloc.data = calloc(1, sizeof(struct my_allocator_state) + n); |
|
31 return alloc; |
|
32 } |
|
33 ``` |
|
34 |