Dynamic memory management in C is very annoying, this library aims to provide an easy and nevertheless powerful way to use dynamic allocated memory in C.
==============
void *mem_alloc(size_t num, type)
Allocates num * sizeof(type)
Bytes and zeros out memory with UTILITIES_MEM_ZERO
.
void *mem_alloc_fast(size_t num, type)
Same as mem_alloc
but does not zero out new memory.
void *mem_alloc_static(size_t num, type)
Allocates num * sizeof(type)
Bytes and zeros out memory with UTILITIES_MEM_ZERO
. Static memory is not grow or shrinkable. (Which uses less memory).
void *mem_alloc_static_fast(size_t num, type)
Same as mem_alloc_static
but does not zero out new memory.
BOOL mem_grow(void *mem, size_t num)
Grows memory to old_size + (num * sizeof(pointer_type))
and zeros out new memory with UTILITIES_MEM_ZERO
. This function works only with non static memory. Returns TRUE
on success, otherwise FALSE
.
BOOL mem_grow_fast(void *mem, size_t num)
Same as mem_grow
but does not zero out new memory.
BOOL mem_shrink(void *mem, size_t num)
Shrinks memory to old_size - (num * sizeof(pointer_type)
. This function works only with non static memory. Returns TRUE
on success, otherwise FALSE
.
BOOL mem_dealloc(void *mem)
Deallocates memory. This function works only with non static memory. Returns TRUE
on success, otherwise FALSE
.
BOOL mem_free(void *mem)
Deallocates memory. This function works only with static memory. Returns TRUE
on success, otherwise FALSE
.
size_t mem_get_num_elements(void *mem)
Returns number of elements. This function works only with non static memory.
size_t mem_get_relative_size(void *mem)
Returns relative size of memory. This function works only with non static memory.
size_t mem_get_absolute_size(void *mem)
Returns absolute size of memory (memory size + offset). This function works only with non static memory.
size_t mem_get_element_size(void *mem)
Returns size of one single element. This function works only with non static memory.
const char *mem_get_datatype(void *mem)
Returns datatype of memory. This function works only with non static memory. Returns unknown
when UTILITIES_MEM_USE_TYPE
is not defined.
unsigned int mem_get_retain_count(void *mem)
Returns retain count of memory. This function works only with non static memory. Returns 1
when UTILITIES_MEM_USE_RETAIN_COUNT
is not defined.
size_t mem_get_static_size(void *mem)
Returns static size of memory. This function works only with static memory.
void mem_dump(void *mem)
Dumps memory information. This function works only with non static memory.
void mem_dump_static(void *mem)
Dumps memory information. This function works only with static memory.
Output for main.c:
Sucessfully allocated 10 ints
Successfully shrank to 5 ints
Successfully grew to 10 ints
Number is: 1337
+-----------------[ MEMORY INFORMATION ]-----------------+
| Datatype : uint_t |
| Retain count : 1 |
| Absolute address : 0x100103b70 |
| Absolute size : 68 Bytes |
| Offset : 28 Bytes |
+--------------------------------------------------------+
| Relative address : 0x100103b8c |
| Relative size : 40 Bytes |
+--------------------------------------------------------+
| Number of elements : 10 Elements |
| Size of one element : 4 Bytes |
+-----------------[ MEMORY DUMP ]-----------------+
| 0x100103b8c : 01 00 00 00 03 00 00 00 ........ |
| 0x100103b94 : 03 00 00 00 07 00 00 00 ........ |
| 0x100103b9c : 00 00 00 00 00 00 00 00 ........ |
| 0x100103ba4 : 00 00 00 00 00 00 00 00 ........ |
| 0x100103bac : 00 00 00 00 00 00 00 00 ........ |
+--------------------------------------------------------+
Memory deallocated successfully!
Successfully allocated 40 Bytes
+-----------------[ MEMORY INFORMATION ]-----------------+
| Absolute address : 0x100103b40 |
| Absolute size : 48 Bytes |
| Offset : 8 Bytes |
+--------------------------------------------------------+
| Relative address : 0x100103b48 |
| Relative size : 40 Bytes |
+-----------------[ MEMORY DUMP ]-----------------+
| 0x100103b48 : 04 00 00 00 02 00 00 00 ........ |
| 0x100103b50 : 00 00 00 00 00 00 00 00 ........ |
| 0x100103b58 : 00 00 00 00 00 00 00 00 ........ |
| 0x100103b60 : 00 00 00 00 00 00 00 00 ........ |
| 0x100103b68 : 00 00 00 00 00 00 00 00 ........ |
+--------------------------------------------------------+
Number is: 42
Static memory deallocated succesfully!