博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rtthread 函数学习
阅读量:2190 次
发布时间:2019-05-02

本文共 1712 字,大约阅读时间需要 5 分钟。

 

 

 

rt_system_heap_init

在使用堆内存前,必须要在系统初始化的时候进行堆内存的初始化,函数为

void rt_system_heap_init(void *begin_addr,void *end_addr) 注:这个函数会把begin_addr和end_addr作为堆空间来用。
参数 描述
begin_addr 堆内存的起始地址
end_addr 堆内存的结束地址
从内存堆中申请用户指定大小的内存块

rt_malloc

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 指定改变大小的字节数
返回值:返回重新分配的内存块地址。

rt_calloc

void* rt_calloc(rt_size_t count,re_size_t size)

函数注释:为用户申请连续内存地址的多个内存块,并且自动进行内存的初始化为0。
参数 描述
count 内存块数量
size 内存块容量
返回值:返回指向第一个内存块的地址,并且所有被分配的内存块初始化为0.

re_free

void re_free(void *ptr)

函数注释:为用户将malloc、realloc、calloc申请的内存释放,每次申请内存用完后必须进行释放,否则会造成内存泄漏。

参数 描述
ptr 指向用户申请的堆地址
返回值:无
小结:malloc和calloc的区别,都是向堆中申请内存,malloc申请的内存可能不是连续的,可能是以链表形式存在于堆中,calloc申请的内存必须的连续的内存块,calloc较malloc不同的是calloc会将申请的堆内存自动初始化为0,初始化效率比malloc手动初始化速度会快,在相同堆空间下,calloc申请的内存有很大可能是没有malloc申请的堆空间大。

rt_malloc_sethook

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 分配到的内存块指针大小

rt_free_sethook

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/

你可能感兴趣的文章
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>