Banjo API 0.0.1
Multi-purpose C99 API
Loading...
Searching...
No Matches
Memory Management
Collaboration diagram for Memory Management:

Detailed Description

Data Structures

struct  bj_memory_callbacks
 Custom allocation callbacks. More...
 

Typedefs

typedef void *(* bj_malloc_fn) (void *p_user_data, size_t size)
 Memory allocation callback.
 
typedef void *(* bj_realloc_fn) (void *p_user_data, void *p_original, size_t size)
 Memory reallocation callback.
 
typedef void(* bj_free_fn) (void *p_user_data, void *p_memory)
 Memory free callback.
 
typedef struct bj_memory_callbacks bj_memory_callbacks
 Custom allocation callbacks.
 

Functions

void * bj_malloc (size_t size)
 Allocate size bytes of memory.
 
void * bj_calloc (size_t size)
 Allocate size bytes of zero-initialized memory.
 
void * bj_realloc (void *p_memory, size_t size)
 Reallocate a memory block to a new size.
 
void bj_free (void *p_memory)
 Free a previously allocated memory block.
 
void bj_memory_set_defaults (const bj_memory_callbacks *p_allocator)
 Set the global default memory allocators.
 
void bj_memory_unset_defaults (void)
 Reset the global default allocators to system defaults.
 
void * bj_memcpy (void *p_dest, const void *p_src, size_t mem_size)
 Copy mem_size bytes from p_src to p_dest.
 
void * bj_memmove (void *p_dest, const void *p_src, size_t mem_size)
 Move mem_size bytes from p_src to p_dest.
 
int bj_memcmp (const void *p_block_a, const void *p_block_b, size_t size)
 Compare two memory blocks.
 
void bj_memset (void *p_dest, uint8_t value, size_t mem_size)
 Fill mem_size bytes at p_dest with value.
 
void bj_memzero (void *p_dest, size_t mem_size)
 Zero out mem_size bytes at p_dest.
 

Data Structure Documentation

◆ bj_memory_callbacks

struct bj_memory_callbacks

This structure holds function pointers for allocation, reallocation, and deallocation callbacks along with user data.

These callbacks can be assigned per-object or set globally with bj_memory_set_defaults.

Data Fields
bj_malloc_fn fn_allocation Allocation function pointer.
bj_free_fn fn_free Deallocation function pointer.
bj_realloc_fn fn_reallocation Reallocation function pointer.
void * p_user_data General purpose context data.

Typedef Documentation

◆ bj_free_fn

typedef void(* bj_free_fn) (void *p_user_data, void *p_memory)

Used in bj_memory_callbacks to set the function used for custom deallocations.

Parameters
p_user_dataGeneral purpose context data.
p_memoryObject memory to dispose.

◆ bj_malloc_fn

typedef void *(* bj_malloc_fn) (void *p_user_data, size_t size)

Used in bj_memory_callbacks to set the function used for custom allocations.

Parameters
p_user_dataGeneral purpose context data.
sizeAllocation size in bytes requested by the caller.
Returns
Pointer to allocated memory block.

◆ bj_memory_callbacks

typedef struct bj_memory_callbacks bj_memory_callbacks

This structure holds function pointers for allocation, reallocation, and deallocation callbacks along with user data.

These callbacks can be assigned per-object or set globally with bj_memory_set_defaults.

◆ bj_realloc_fn

typedef void *(* bj_realloc_fn) (void *p_user_data, void *p_original, size_t size)

Used in bj_memory_callbacks to set the function used for custom reallocations.

Parameters
p_user_dataGeneral purpose context data.
p_originalInitial object to reallocate.
sizeAllocation size in bytes requested by the caller.
Returns
Pointer to reallocated memory block.

Function Documentation

◆ bj_calloc()

void * bj_calloc ( size_t size)

The returned memory is set to zero bytes.

Parameters
[in]sizeNumber of bytes to allocate.
Returns
Pointer to newly allocated zeroed memory block.

◆ bj_free()

void bj_free ( void * p_memory)
Parameters
[in]p_memoryPointer to memory to free.
Note
p_memory must have been allocated by bj_malloc or bj_realloc.

◆ bj_malloc()

void * bj_malloc ( size_t size)
Parameters
[in]sizeNumber of bytes to allocate.
Returns
Pointer to newly allocated memory block.

◆ bj_memcmp()

int bj_memcmp ( const void * p_block_a,
const void * p_block_b,
size_t size )
Parameters
[in]p_block_aPointer to first memory block.
[in]p_block_bPointer to second memory block.
[in]sizeNumber of bytes to compare.
Returns
Zero if equal, negative if a < b, positive if a > b.

◆ bj_memcpy()

void * bj_memcpy ( void * p_dest,
const void * p_src,
size_t mem_size )
Parameters
[in]p_destDestination pointer.
[in]p_srcSource pointer.
[in]mem_sizeNumber of bytes to copy.
Returns
Pointer to p_dest.

◆ bj_memmove()

void * bj_memmove ( void * p_dest,
const void * p_src,
size_t mem_size )

Similar to bj_memcpy but handles overlapping memory regions safely.

Parameters
[in]p_destDestination pointer.
[in]p_srcSource pointer.
[in]mem_sizeNumber of bytes to move.
Returns
Pointer to p_dest.

◆ bj_memory_set_defaults()

void bj_memory_set_defaults ( const bj_memory_callbacks * p_allocator)

If p_allocator is NULL, resets to system defaults (malloc, realloc, free).

Parameters
[in]p_allocatorPointer to custom allocator callbacks.

◆ bj_memory_unset_defaults()

void bj_memory_unset_defaults ( void )

Sets allocators back to standard system functions (malloc, realloc, free).

◆ bj_memset()

void bj_memset ( void * p_dest,
uint8_t value,
size_t mem_size )
Parameters
[in]p_destDestination pointer.
[in]valueByte value to fill.
[in]mem_sizeNumber of bytes to fill.

◆ bj_memzero()

void bj_memzero ( void * p_dest,
size_t mem_size )

Effectively calls bj_memset with zero.

Parameters
[in]p_destDestination pointer.
[in]mem_sizeNumber of bytes to zero.

◆ bj_realloc()

void * bj_realloc ( void * p_memory,
size_t size )
Parameters
[in]p_memoryPointer to previously allocated memory.
[in]sizeNumber of bytes to allocate.
Returns
Pointer to newly reallocated memory block.
Note
p_memory must have been allocated by bj_malloc or bj_realloc.