Deprecated fork of old network stack source from github. Please use official library instead: https://mbed.org/users/mbed_official/code/EthernetInterface/

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_trim (void *rmem, mem_size_t newsize)
 Shrink memory returned by mem_malloc().
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

u8_t ram_heap[MEM_SIZE_ALIGNED+(2
*SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT 
ETHMEM_SECTION )
 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_mutex_t mem_mutex
 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 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 642 of file 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 129 of file mem.c.

void mem_init ( void   )

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

Definition at line 284 of file 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).

Try a bigger pool if this one is empty!

Definition at line 79 of file mem.c.

void* mem_trim ( void *  rmem,
mem_size_t  newsize 
)

Shrink memory returned by mem_malloc().

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 or NULL if newsize is > old size, in which case rmem is NOT touched or freed!

Definition at line 379 of file 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 246 of file mem.c.


Variable Documentation

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

the heap.

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

Definition at line 194 of file mem.c.

struct mem* lfree [static]

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

Definition at line 203 of file mem.c.

sys_mutex_t mem_mutex [static]

concurrent access protection

Definition at line 206 of file 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 199 of file mem.c.

struct mem* ram_end [static]

the last entry, always unused!

Definition at line 201 of file mem.c.