Deniz Coban / Deneme
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.

Defines

#define MIN_SIZE   12
 All allocated blocks will be MIN_SIZE bytes big, at least! MIN_SIZE can be overridden to suit your needs.

Functions

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_free (void *rmem)
 Put a struct mem back on the heap.
void * mem_trim (void *rmem, mem_size_t newsize)
 Shrink memory returned by mem_malloc().
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.
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 
MEM_POSITION )
 If you want to relocate the heap to external memory, simply define LWIP_RAM_HEAP_POINTER as a void-pointer to that location.
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.


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.

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

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()

Definition at line 309 of file mem.c.

void mem_init ( void   )

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

Definition at line 272 of file mem.c.

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:
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 492 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 367 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 234 of file mem.c.


Variable Documentation

struct mem* lfree [static]

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

Definition at line 191 of file mem.c.

sys_mutex_t mem_mutex [static]

concurrent access protection

Definition at line 194 of file mem.c.

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

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

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

struct mem* ram_end [static]

the last entry, always unused!

Definition at line 189 of file mem.c.