A version of LWIP, provided for backwards compatibility.

Dependents:   AA_DemoBoard DemoBoard HelloServerDemo DemoBoard_RangeIndicator ... more

Embed: (wiki syntax)

« Back to documentation index

mem.c File Reference

mem.c File Reference

Dynamic memory manager. More...

Go to the source code of this file.

Functions

void * mem_malloc (mem_size_t size)
 Allocate memory: determine the smallest pool that is big enough to contain an element of 'size' and get an element from that pool.
void mem_free (void *rmem)
 Free memory previously allocated by mem_malloc.
static void plug_holes (struct mem *mem)
 "Plug holes" by combining adjacent empty struct mems.
void mem_init (void)
 Zero the heap and initialize start, end and lowest-free.
void * mem_realloc (void *rmem, mem_size_t newsize)
 In contrast to its name, mem_realloc can only shrink memory, not expand it.
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.

Variables

static u8_t ram_heap [MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]
 the heap.
static u8_t * ram
 pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array
static struct mem * ram_end
 the last entry, always unused!
static struct mem * lfree
 pointer to the lowest free block, this is used for faster search
static sys_sem_t mem_sem
 concurrent access protection

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

Definition in file tag/0.5/lwIP/core/mem.c.


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

Definition at line 564 of file tag/0.5/lwIP/core/mem.c.

void mem_free ( void *  rmem )

Free memory previously allocated by mem_malloc.

Put a struct mem back on the heap.

Loads the pool number and calls memp_free with that pool number to put the element back into its pool

Parameters:
rmemthe memory element to free
rmemis the data portion of a struct mem as returned by a previous call to mem_malloc()

Definition at line 126 of file tag/0.5/lwIP/core/mem.c.

void mem_init ( void   )

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

Definition at line 233 of file tag/0.5/lwIP/core/mem.c.

void* mem_malloc ( mem_size_t  size )

Allocate memory: determine the smallest pool that is big enough to contain an element of 'size' and get an element from that pool.

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

Parameters:
sizethe size in bytes of the memory needed
Returns:
a pointer to the allocated memory or NULL if the pool is empty
Parameters:
sizeis 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).

Definition at line 86 of file tag/0.5/lwIP/core/mem.c.

void* mem_realloc ( void *  rmem,
mem_size_t  newsize 
)

In contrast to its name, mem_realloc can only shrink memory, not expand it.

Since the only use (for now) is in pbuf_realloc (which also can only shrink), this shouldn't be a problem!

Parameters:
rmempointer to memory allocated by mem_malloc the is to be shrinked
newsizerequired size after shrinking (needs to be smaller than or equal to the previous size)
Returns:
for compatibility reasons: is always == rmem, at the moment

Definition at line 326 of file tag/0.5/lwIP/core/mem.c.

static void plug_holes ( struct mem *  mem ) [static]

"Plug holes" by combining adjacent empty struct mems.

After this function is through, there should not exist one empty struct mem pointing to another empty struct mem.

Parameters:
memthis points to a struct mem which just has been freed

Definition at line 195 of file tag/0.5/lwIP/core/mem.c.


Variable Documentation

struct mem* lfree [static]

pointer to the lowest free block, this is used for faster search

Definition at line 179 of file tag/0.5/lwIP/core/mem.c.

sys_sem_t mem_sem [static]

concurrent access protection

Definition at line 181 of file tag/0.5/lwIP/core/mem.c.

u8_t* ram [static]

pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array

Definition at line 175 of file tag/0.5/lwIP/core/mem.c.

struct mem* ram_end [static]

the last entry, always unused!

Definition at line 177 of file tag/0.5/lwIP/core/mem.c.

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

the heap.

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

Definition at line 173 of file tag/0.5/lwIP/core/mem.c.