XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_alloc.c 文件参考

采用链表管理,对空闲内存采取相邻合并策略,且能注册多处不同的内存 更多...

#include "xf_heap_config.h"
#include "xf_alloc.h"
xf_alloc.c 的引用(Include)关系图:

浏览源代码.

结构体

struct  _block_link_t
 

宏定义

#define BYTE_ALIGNMENT_MASK   (XF_HEAP_BYTE_ALIGNMENT - 1)
 
#define MINIMUM_BLOCK_SIZE   ((unsigned int) (heap_struct_size << 1))
 

类型定义

typedef struct _block_link_t block_link_t
 

函数

static void insert_block_into_free_list (block_link_t *block_to_insert)
 将内存块插入空闲链表中,前后内存连续则进行合并
 
void * xf_heap_malloc (unsigned int size)
 带内存管理的内存申请函数。
 
void xf_heap_free (void *pv)
 带内存管理的内存释放函数。
 
unsigned int xf_heap_region (const xf_heap_region_t *const heap_regions)
 内存注册,需要在使用 xf_heap_malloc 之前注册。
 
unsigned int xf_heap_get_block_size (void *pv)
 获取内存块的实际大小。
 

变量

static const unsigned int heap_struct_size
 
static const unsigned int block_allocate_bit = ((unsigned int) 1) << ((sizeof(unsigned int) * 8) - 1)
 
static block_link_t start
 闲内存块链表的起点和终点。 用户在注册的时候末尾 next_free_block 为 (void*) 0,block_size 为 0
 
static block_link_tend = (void *)0
 

详细描述

采用链表管理,对空闲内存采取相邻合并策略,且能注册多处不同的内存

作者
cangyu (sky.k.nosp@m.irto.nosp@m.@qq.c.nosp@m.om)
注解
主体部分借鉴了freeRTOS的heap_5.c的功能,在此之上将非内存管理算法 的部分剥离了出去,单独形成xf_heap.c。相当于xf_malloc的默认内存管理方式
版本
0.1
日期
2023-11-15

在文件 xf_alloc.c 中定义.

宏定义说明

◆ BYTE_ALIGNMENT_MASK

#define BYTE_ALIGNMENT_MASK   (XF_HEAP_BYTE_ALIGNMENT - 1)

在文件 xf_alloc.c22 行定义.

◆ MINIMUM_BLOCK_SIZE

#define MINIMUM_BLOCK_SIZE   ((unsigned int) (heap_struct_size << 1))

在文件 xf_alloc.c25 行定义.

类型定义说明

◆ block_link_t

typedef struct _block_link_t block_link_t

函数说明

◆ insert_block_into_free_list()

static void insert_block_into_free_list ( block_link_t block_to_insert)
static

将内存块插入空闲链表中,前后内存连续则进行合并

参数
block_to_insert空闲内存区域数组,需要结尾为{(void*) 0, 0}为最后一个内存块

在文件 xf_alloc.c232 行定义.

◆ xf_heap_malloc()

void * xf_heap_malloc ( unsigned int  size)

带内存管理的内存申请函数。

参数
size申请内存的大小。
返回
void* 申请内存地址

内存剩余足够,则切割成已使用内存块和更小的空闲内存块, 空闲内存块插入空闲内存块链表

在文件 xf_alloc.c60 行定义.

◆ xf_heap_free()

void xf_heap_free ( void *  pv)

带内存管理的内存释放函数。

参数
pv需要释放的指针地址。

在文件 xf_alloc.c119 行定义.

◆ xf_heap_region()

unsigned int xf_heap_region ( const xf_heap_region_t *const  heap_regions)

内存注册,需要在使用 xf_heap_malloc 之前注册。

参数
heap_regions注册内存的数据信息。
返回
unsigned int 总共可用内存大小

在文件 xf_alloc.c141 行定义.

◆ xf_heap_get_block_size()

unsigned int xf_heap_get_block_size ( void *  pv)

获取内存块的实际大小。

参数
pv内存块指针。
返回
unsigned int 内存块实际占用内存大小

在文件 xf_alloc.c204 行定义.

变量说明

◆ heap_struct_size

const unsigned int heap_struct_size
static
初始值:
=
(sizeof(block_link_t)
+ ((unsigned int)(XF_HEAP_BYTE_ALIGNMENT - 1))) & ~((unsigned int)BYTE_ALIGNMENT_MASK)
struct _block_link_t block_link_t
#define BYTE_ALIGNMENT_MASK
Definition xf_alloc.c:22
#define XF_HEAP_BYTE_ALIGNMENT

在文件 xf_alloc.c41 行定义.

◆ block_allocate_bit

const unsigned int block_allocate_bit = ((unsigned int) 1) << ((sizeof(unsigned int) * 8) - 1)
static

在文件 xf_alloc.c46 行定义.

◆ start

block_link_t start
static

闲内存块链表的起点和终点。 用户在注册的时候末尾 next_free_block 为 (void*) 0,block_size 为 0

注解
注意:这里终点是指针。

在文件 xf_alloc.c54 行定义.

◆ end

block_link_t * end = (void *)0
static

在文件 xf_alloc.c54 行定义.