mem.c File Reference

#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/sys.h"
#include "lwip/stats.h"
#include "lwip/err.h"
#include <string.h>

Classes

struct  mem

Defines

#define MIN_SIZE   12

Functions

void mem_init (void)
void mem_free (void *rmem)
void * mem_trim (void *rmem, mem_size_t newsize)
void * mem_malloc (mem_size_t size)
void * mem_calloc (mem_size_t count, mem_size_t size)

Variables

u8_t ram_heap [MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]

Detailed Description

Dynamic memory manager

This is a lightweight replacement for the standard C library malloc().

If you want to use the standard C library malloc() instead, define MEM_LIBC_MALLOC to 1 in your lwipopts.h

To let mem_malloc() use pools (prevents fragmentation and is much faster than a heap but might waste some memory), define MEM_USE_POOLS to 1, define MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list of pools like this (more pools can be added between _START and _END):

Define three pools with sizes 256, 512, and 1512 bytes LWIP_MALLOC_MEMPOOL_START LWIP_MALLOC_MEMPOOL(20, 256) LWIP_MALLOC_MEMPOOL(10, 512) LWIP_MALLOC_MEMPOOL(5, 1512) LWIP_MALLOC_MEMPOOL_END


Define Documentation

#define MIN_SIZE   12
 

All allocated blocks will be MIN_SIZE bytes big, at least! MIN_SIZE can be overridden to suit your needs. Smaller values save space, larger values could prevent too small blocks to fragment the RAM too much.


Function Documentation

void* mem_calloc mem_size_t  count,
mem_size_t  size
 

Contiguously allocates enough space for count objects that are size bytes of memory each and returns a pointer to the allocated memory.

The allocated memory is filled with bytes of value zero.

Parameters:
count number of objects to allocate
size size of the objects to allocate
Returns:
pointer to allocated memory / NULL pointer if there is an error

void mem_free void *  rmem  ) 
 

Put a struct mem back on the heap

Parameters:
rmem is the data portion of a struct mem as returned by a previous call to mem_malloc()

void mem_init void   ) 
 

Zero the heap and initialize start, end and lowest-free

void* mem_malloc mem_size_t  size  ) 
 

Adam's mem_malloc() plus solution for bug #17922 Allocate a block of memory with a minimum of 'size' bytes.

Parameters:
size is the minimum size of the requested block in bytes.
Returns:
pointer to allocated memory or NULL if no free memory was found.
Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).

void* mem_trim void *  rmem,
mem_size_t  newsize
 

Shrink memory returned by mem_malloc().

Parameters:
rmem pointer to memory allocated by mem_malloc the is to be shrinked
newsize required size after shrinking (needs to be smaller than or equal to the previous size)
Returns:
for compatibility reasons: is always == rmem, at the moment or NULL if newsize is > old size, in which case rmem is NOT touched or freed!


Variable Documentation

u8_t ram_heap[MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]
 

the heap. we need one struct mem at the end and some room for alignment


Generated on Fri Feb 14 12:33:21 2014 for 2014.1_doc by  doxygen 1.4.5