Main Page | Modules | Data Structures | File List | Data Fields | Globals | Examples

Memory block management functions


Detailed Description

The memory block allocation routines provide a simple yet powerful set of functions for managing a set of memory blocks of fixed size.

A set of memory blocks is statically declared with the MEMB() macro. Memory blocks are allocated from the declared memory by the memb_alloc() function, and are deallocated with the memb_free() function.

Note:
Because of namespace clashes only one MEMB() can be declared per C module, and the name scope of a MEMB() memory block is local to each C module.
The following example shows how to declare and use a memory block called "cmem" which has 8 chunks of memory with each memory chunk being 20 bytes large.

#include "memb.h" MEMB(cmem, 20, 8); int main(int argc, char *argv[]) { char *ptr; memb_init(&cmem); ptr = memb_alloc(&cmem); if(ptr != NULL) { do_something(ptr); } else { printf("Could not allocate memory.\n"); } if(memb_free(&cmem, ptr) == 0) { printf("Deallocation succeeded.\n"); } }


Files

file  memb.h
 Memory block allocation routines.

file  memb.c
 Memory block allocation routines.


Defines

#define MEMB(name, size, num)
 Declare a memory block.


Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().

char * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().

char memb_ref (struct memb_blocks *m, char *ptr)
 Increase the reference count for a memory chunk.

char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().


Define Documentation

#define MEMB name,
size,
num   ) 
 

Value:

static char MEMB_CONCAT(name,_memb_mem)[(size + 1) * num]; \
        static struct memb_blocks name = {size, num, MEMB_CONCAT(name,_memb_mem)}
Declare a memory block.

This macro is used to staticall declare a block of memory that can be used by the block allocation functions. The macro statically declares a C array with a size that matches the specified number of blocks and their individual sizes.

Example:

MEMB(connections, sizeof(struct connection), 16);

Parameters:
name The name of the memory block (later used with memb_init(), memb_alloc() and memb_free()).
size The size of each memory chunk, in bytes.
num The total number of memory chunks in the block.


Function Documentation

char * memb_alloc struct memb_blocks *  m  ) 
 

Allocate a memory block from a block of memory declared with MEMB().

Parameters:
m A memory block previosly declared with MEMB().

char memb_free struct memb_blocks *  m,
void *  ptr
 

Deallocate a memory block from a memory block previously declared with MEMB().

Parameters:
m m A memory block previosly declared with MEMB().
ptr A pointer to the memory block that is to be deallocated.
Returns:
The new reference count for the memory block (should be 0 if successfully deallocated) or -1 if the pointer "ptr" did not point to a legal memory block.

void memb_init struct memb_blocks *  m  ) 
 

Initialize a memory block that was declared with MEMB().

Parameters:
m A memory block previosly declared with MEMB().

char memb_ref struct memb_blocks *  m,
char *  ptr
 

Increase the reference count for a memory chunk.

Note:
No sanity checks are currently made.
Parameters:
m m A memory block previosly declared with MEMB().
ptr A pointer to the memory chunk for which the reference count should be increased.
Returns:
The new reference count.


Generated on Wed Jul 6 01:19:06 2005 for Contiki/ESB by doxygen 1.3.6