本文共 1712 字,大约阅读时间需要 5 分钟。
在使用堆内存前,必须要在系统初始化的时候进行堆内存的初始化,函数为
void rt_system_heap_init(void *begin_addr,void *end_addr) 注:这个函数会把begin_addr和end_addr作为堆空间来用。 参数 描述 begin_addr 堆内存的起始地址 end_addr 堆内存的结束地址 从内存堆中申请用户指定大小的内存块void* rt_malloc(rt_size_t size)
函数注释:rt_malloc函数会从系统堆空间中找到合适大小的内存块,然后把内存的地址作为rt_malloc的返回值返回给用户 参数 描述 size 用户想要申请的内存块大小 返回值:如果申请成功,则返回申请到的内存块的地址,失败则返回NULL。void* rt_realloc(void *rmem,rt_size_t newsize)
函数注释:为用户重新分配内存块的大小,原来内存块rmem的数据内容保持不变,缩小的情况下,后面的数据被自动截断丢弃。申请成功后,rmem先前申请的内存块系统自动释放。 参数 描述 rmem 用户想要改变该内存块大小的原始地址 newsize 指定改变大小的字节数 返回值:返回重新分配的内存块地址。void* rt_calloc(rt_size_t count,re_size_t size)
函数注释:为用户申请连续内存地址的多个内存块,并且自动进行内存的初始化为0。 参数 描述 count 内存块数量 size 内存块容量 返回值:返回指向第一个内存块的地址,并且所有被分配的内存块初始化为0.void re_free(void *ptr)
函数注释:为用户将malloc、realloc、calloc申请的内存释放,每次申请内存用完后必须进行释放,否则会造成内存泄漏。
参数 描述 ptr 指向用户申请的堆地址 返回值:无 小结:malloc和calloc的区别,都是向堆中申请内存,malloc申请的内存可能不是连续的,可能是以链表形式存在于堆中,calloc申请的内存必须的连续的内存块,calloc较malloc不同的是calloc会将申请的堆内存自动初始化为0,初始化效率比malloc手动初始化速度会快,在相同堆空间下,calloc申请的内存有很大可能是没有malloc申请的堆空间大。void rt_malloc_sethook(void (*hook)(void *ptr,rt_size_t size));
函数注释:设置钩子函数会在内存分配完成后将申请到的内存块和大小传进hook函数中 参数 描述 hook 钩子函数指针,hook函数定义如下: void hook(void *ptr,rt_size_t size); 函数注释:rt_malloc_sethook钩子函数的函数指针 参数 描述 ptr 分配到的内存块指针 size 分配到的内存块指针大小void rt_free_sethook(void (*hook)(void *ptr));
函数注释:设置钩子函数会在内存释放完成前进行回调,将用户释放的内存地址块作为参数传递进去(此时内存块没有被释放) 参数 描述 hook 钩子函数指针,函数定义如下:void hook(void *ptr);
函数描述:rt_free_sethook钩子函数的函数指针 参数 描述 ptr 待释放堆内存块指针RT-Thread堆内存操作代码示例如下:
struct rt_thread_t thread1;char thread_stack[512];void entry_thread(){ int i=0,j=0,size=0; char *ptr[200]; size = sizeof(ptr)/sizeof(char *); for(i=0;i
转载地址:http://jcuub.baihongyu.com/