RT-Thread API参考手册
3.1.1
嵌入式实时操作系统
|
动态内存堆接口 更多...
结构体 | |
struct | rt_memheap_item |
内存堆管理控制块 更多... | |
struct | rt_memheap |
内存堆控制块 更多... | |
函数 | |
void * | rt_malloc (rt_size_t size) |
分配内存块 更多... | |
void * | rt_realloc (void *rmem, rt_size_t newsize) |
重新分配内存块 更多... | |
void * | rt_calloc (rt_size_t count, rt_size_t size) |
分配多内存块 更多... | |
void | rt_free (void *rmem) |
释放内存块 更多... | |
rt_err_t | rt_memheap_init (struct rt_memheap *memheap, const char *name, void *start_addr, rt_uint32_t size) |
初始化内存堆 更多... | |
动态内存堆接口
动态内存管理是一个真实的堆内存管理模块,可以在当前资源满足的情况下,根据用户 的需求分配任意大小的内存块。而当用户不需要再使用这些内存块时,又可以释放回堆中 供其他应用分配使用。RT-Thread 系统为了满足不同的需求,提供了两套不同的动态内存 管理算法,分别是小堆内存管理算法和 SLAB 内存管理算法。
小堆内存管理模块主要针对系统资源比较少,一般用于小于2MB内存空间的系统;而SLAB 内存管理模块则主要是在系统资源比较丰富时,提供了一种近似多内存池管理算法的快速 算法。两种内存管理模块在系统运行时只能选择其中之一或者完全不使用动态堆内存管理 器。这两种管理模块提供的API接口完全相同。
除上述之外,RT-Thread还有一种针对多内存堆的管理机制,即memheap内存管理。memheap方法 适用于系统存在多个内存堆的情况,它可以将多个内存“粘贴”在一起,形成一个大的内存堆, 用户使用起来会感到格外便捷。
void* rt_malloc | ( | rt_size_t | size | ) |
分配内存块
该函数将从内存堆上分配用户指定大小的内存块。
size | 需要分配的内存块的大小,单位为字节。 |
void* rt_realloc | ( | void * | rmem, |
rt_size_t | newsize | ||
) |
重新分配内存块
此函数将在已分配内存块的基础上重新分配内存块的大小(增加或缩小),在进行重新分配内存块时, 原来的内存块数据保持不变(缩小的情况下,后面的数据被自动截断)。
rmem | 指向已分配的内存块 |
newsize | 重新分配的内存大小 |
分配多内存块
此函数将从内存堆中分配连续内存地址的多个内存块,每个空间对象的内存大小为字节,并返回指向已分配内存的指针。
count | 分配的空间对象的计数 |
size | 分配的空间对象的大小 |
void rt_free | ( | void * | rmem | ) |
释放内存块
用户线程使用完从内存分配器中申请的内存后,必须及时调用该函数释放,否则会造成内存泄漏, 系统会把待释放的内存还回给堆管理器中。
rmem | 待释放的内存块指针 |
rt_err_t rt_memheap_init | ( | struct rt_memheap * | memheap, |
const char * | name, | ||
void * | start_addr, | ||
rt_uint32_t | size | ||
) |
初始化内存堆
在使用memheap堆内存时,必须要在系统初始化的时候进行堆内存的初始化, 可以通过调用该函数完成内存堆的初始化。
memheap | 内存堆句柄 |
name | 内存堆的名称 |
start_addr | 堆内存区域起始地址 |
size | 堆内存大小 |