docs/Writerside/topics/allocator.h.md

branch
docs/3.1
changeset 1141
a06a2d27c043
child 1142
9437530176bc
equal deleted inserted replaced
1140:88a9ee79c102 1141:a06a2d27c043
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

mercurial