Memory Pool
Create a pool of memory blocks
Data Structures | Macros | Typedefs | Functions | Variables
memory_pool.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <memory.h>
#include "memory_pool.h"
Include dependency graph for memory_pool.c:

Go to the source code of this file.

Data Structures

struct  memory_pool_block_header
 
struct  memory_pool
 

Macros

#define MEMORY_POOL_HTODB(_header_, _block_size_)   ((void *)_header_ - _block_size_)
 
#define MEMORY_POOL_DBTOH(_data_block_, _block_size_)   ((memory_pool_block_header_t *)(_data_block_ + _block_size_))
 
#define NODE_MAGIC   0xBAADA555
 

Typedefs

typedef struct memory_pool_block_header memory_pool_block_header_t
 type alias for global namespace More...
 

Functions

memory_pool_tmemory_pool_init (size_t count, size_t block_size)
 memory pool initializer More...
 
bool memory_pool_destroy (memory_pool_t *mp)
 
void * memory_pool_acquire (memory_pool_t *mp)
 memory pool pop function More...
 
bool memory_pool_release (memory_pool_t *mp, void *data)
 memory pool push function More...
 
size_t memory_pool_available (memory_pool_t *mp)
 memory pool availability function More...
 
void memory_pool_dump (memory_pool_t *mp)
 memory pool dump function More...
 

Variables

bool DEBUG = false
 

Macro Definition Documentation

◆ MEMORY_POOL_DBTOH

#define MEMORY_POOL_DBTOH (   _data_block_,
  _block_size_ 
)    ((memory_pool_block_header_t *)(_data_block_ + _block_size_))

Definition at line 69 of file memory_pool.c.

◆ MEMORY_POOL_HTODB

#define MEMORY_POOL_HTODB (   _header_,
  _block_size_ 
)    ((void *)_header_ - _block_size_)

Definition at line 64 of file memory_pool.c.

◆ NODE_MAGIC

#define NODE_MAGIC   0xBAADA555

Definition at line 72 of file memory_pool.c.

Typedef Documentation

◆ memory_pool_block_header_t

type alias for global namespace

Function Documentation

◆ memory_pool_acquire()

void* memory_pool_acquire ( memory_pool_t mp)

memory pool pop function

Parameters
mpa pointer to a memory pool object
Returns
NULL if nothing to pop
data a pointer to top data block

Definition at line 214 of file memory_pool.c.

◆ memory_pool_available()

size_t memory_pool_available ( memory_pool_t mp)

memory pool availability function

Parameters
mpa pointer to a memory pool object
Returns
number of available data blocks
0 if no data blocks available or mp invalid

Definition at line 293 of file memory_pool.c.

◆ memory_pool_destroy()

bool memory_pool_destroy ( memory_pool_t mp)
Todo:
make sure that header gets freed as well with datablock

Definition at line 154 of file memory_pool.c.

◆ memory_pool_dump()

void memory_pool_dump ( memory_pool_t mp)

memory pool dump function

Parameters
mpa pointer to a memory pool object

Iterates through all free data blocks in memory pool, printing metadata about each to user.

Definition at line 310 of file memory_pool.c.

◆ memory_pool_init()

memory_pool_t* memory_pool_init ( size_t  count,
size_t  block_size 
)

memory pool initializer

Parameters
countnumber of nodes (headers) in pool
block_sizesize of each data block pointed to by nodes
Returns
NULL if OOM, or if for loop not fully traversed
memory address of mp if successful
Todo:
make sure this does not leak memory if for loop not fully traversed (case n != count)

Allocates one memory pool struct and count number of memory pool block and header combinations. Also allocates memory for count number of pointers in shadow pointer array.

out of memory

Definition at line 90 of file memory_pool.c.

◆ memory_pool_release()

bool memory_pool_release ( memory_pool_t mp,
void *  data 
)

memory pool push function

Parameters
mpa pointer to a memory pool object
dataa pointer to a data block with attached header
Returns
true if successful

Definition at line 253 of file memory_pool.c.

Variable Documentation

◆ DEBUG

bool DEBUG = false

Definition at line 16 of file memory_pool.c.