lwIP  2.1.0
Lightweight IP stack
mem.c File Reference
#include "lwip/opt.h"
#include "lwip/mem.h"
#include "lwip/def.h"
#include "lwip/sys.h"
#include "lwip/stats.h"
#include "lwip/err.h"
#include <string.h>

Data Structures

struct  mem
 

Macros

#define MIN_SIZE   12
 

Functions

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

Variables

u8_t ram_heap [((((((1600)+1 - 1U) &~(1 -1U))+(2U *(((sizeof(struct mem))+1 - 1U) &~(1 -1U))))+1 - 1U))]
 

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 MEMP_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

Macro Definition Documentation

◆ MIN_SIZE

#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

◆ mem_calloc()

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
countnumber of objects to allocate
sizesize of the objects to allocate
Returns
pointer to allocated memory / NULL pointer if there is an error

◆ mem_free()

void mem_free ( void *  rmem)

Put a struct mem back on the heap

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

◆ mem_init()

void mem_init ( void  )

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

◆ mem_malloc()

void* mem_malloc ( mem_size_t  size_in)

Allocate a block of memory with a minimum of 'size' bytes.

Parameters
size_inis 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).

◆ mem_trim()

void* mem_trim ( void *  rmem,
mem_size_t  new_size 
)

Shrink memory returned by mem_malloc().

Parameters
rmempointer to memory allocated by mem_malloc the is to be shrinked
new_sizerequired 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

◆ ram_heap

u8_t ram_heap[(((((( 1600)+ 1 - 1U) &~(1 -1U))+(2U *(((sizeof(struct mem))+ 1 - 1U) &~(1 -1U))))+ 1 - 1U))]

If you want to relocate the heap to external memory, simply define LWIP_RAM_HEAP_POINTER as a void-pointer to that location. If so, make sure the memory at that location is big enough (see below on how that space is calculated). the heap. we need one struct mem at the end and some room for alignment