ReactOS 0.4.16-dev-297-gc569aee
|
#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>
Go to the source code of this file.
Classes | |
struct | mem |
Functions | |
LWIP_DECLARE_MEMORY_ALIGNED (ram_heap, MEM_SIZE_ALIGNED+(2U *SIZEOF_STRUCT_MEM)) | |
static struct mem * | ptr_to_mem (mem_size_t ptr) |
static mem_size_t | mem_to_ptr (void *mem) |
static void | plug_holes (struct mem *mem) |
void | mem_init (void) |
static int | mem_link_valid (struct mem *mem) |
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 | |
static u8_t * | ram |
static struct mem * | ram_end |
static sys_mutex_t | mem_mutex |
static struct mem *LWIP_MEM_LFREE_VOLATILE | lfree |
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
Definition in file mem.c.
#define LWIP_MEM_FREE_PROTECT | ( | ) | sys_mutex_lock(&mem_mutex) |
#define LWIP_MEM_FREE_UNPROTECT | ( | ) | sys_mutex_unlock(&mem_mutex) |
#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) |
#define MEM_STATS_DEC_USED_LOCKED | ( | x, | |
y | |||
) | SYS_ARCH_LOCKED(MEM_STATS_DEC_USED(x, y)) |
#define MEM_STATS_INC_LOCKED | ( | x | ) | SYS_ARCH_LOCKED(MEM_STATS_INC(x)) |
#define MEM_STATS_INC_USED_LOCKED | ( | x, | |
y | |||
) | SYS_ARCH_LOCKED(MEM_STATS_INC_USED(x, y)) |
#define MIN_SIZE 12 |
#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE) |
#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) |
LWIP_DECLARE_MEMORY_ALIGNED | ( | ram_heap | , |
MEM_SIZE_ALIGNED+ | 2U *SIZEOF_STRUCT_MEM | ||
) |
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
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.
count | number of objects to allocate |
size | size of the objects to allocate |
Definition at line 999 of file mem.c.
Referenced by bridgeif_fdb_init().
Put a struct mem back on the heap
rmem | is the data portion of a struct mem as returned by a previous call to mem_malloc() |
Definition at line 617 of file mem.c.
Zero the heap and initialize start, end and lowest-free
Definition at line 516 of file mem.c.
Referenced by lwip_init().
Definition at line 551 of file mem.c.
Referenced by mem_free().
void * mem_malloc | ( | mem_size_t | size_in | ) |
Allocate a block of memory with a minimum of 'size' bytes.
size_in | is the minimum size of the requested block in bytes. |
Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).
Definition at line 831 of file mem.c.
Referenced by do_memp_malloc_pool(), malloc_keep_x(), mem_calloc(), pbuf_alloc(), slipif_init(), and START_TEST().
|
static |
Definition at line 457 of file mem.c.
Referenced by mem_link_valid(), mem_malloc(), mem_trim(), and plug_holes().
void * mem_trim | ( | void * | rmem, |
mem_size_t | new_size | ||
) |
Shrink memory returned by mem_malloc().
rmem | pointer to memory allocated by mem_malloc the is to be shrunk |
new_size | required size after shrinking (needs to be smaller than or equal to the previous size) |
Definition at line 699 of file mem.c.
Referenced by pbuf_realloc(), and START_TEST().
"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.
mem | this points to a struct mem which just has been freed |
Definition at line 474 of file mem.c.
Referenced by mem_free().
|
static |
Definition at line 451 of file mem.c.
Referenced by mem_init(), mem_link_valid(), mem_malloc(), mem_trim(), and plug_holes().
|
static |
pointer to the lowest free block, this is used for faster search
Definition at line 421 of file mem.c.
Referenced by mem_free(), mem_init(), mem_malloc(), mem_trim(), and plug_holes().
|
static |
concurrent access protection
Definition at line 390 of file mem.c.
Referenced by mem_init(), and mem_malloc().
|
static |
pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array
Definition at line 384 of file mem.c.
Referenced by mem_free(), mem_init(), mem_to_ptr(), mem_trim(), plug_holes(), and ptr_to_mem().
the last entry, always unused!
Definition at line 386 of file mem.c.
Referenced by mem_free(), mem_init(), mem_link_valid(), mem_malloc(), mem_trim(), and plug_holes().