当前位置:网站首页 > 技术博客 > 正文 内存trfc根据什么调整 技术博客 来源: 网络 编辑:小编 发布时间:2025-10-03 23:01:04 浏览量:38 [tocm] 简介 TLSF算法是专门用作内存管理的算法,作为内存管理的算法它就逃不开初始化申请释放操作,那么这里就简单介绍一下这几个操作,让大家更好的上手使用这个开源算法。 如果大家不了解这个算法的话可以先阅读这篇文章: TLSF -- 内存管理中的超级英雄! 文章会按照以下顺序介绍,大家按需阅读: 1. 源文件获取 2. 堆区初始化 3. 内存申请 4. 内存释放 源文件获取 源代码可以直接从github上获取: https://github.com/mattconte/tlsf 获取成功后,我们可以直接将tlsf.h和tlsf.c文件导入到我们的工程中就可以直接使用了。 堆区初始化 首先介绍一下堆区初始化设计的函数 ```c tlsf_t tlsf_create(void* mem); tlsf_t tlsf_create_with_pool(void* mem, size_t bytes); pool_t tlsf_add_pool(tlsf_t tlsf, void* mem, size_t bytes); ``` 函数作用: 1.tlsf_t tlsf_create(void* mem); 根据传入的内存空间初始化堆管理器,返回初始化完成后的指针,指针指向管理器的头部,即mem指针指向的地址。 如下图:  2.pool_t tlsf_add_pool(tlsf_t tlsf, void* mem, size_t bytes); 函数用于将指定大小的内存块加入到堆管理器中。 3.tlsf_t tlsf_create_with_pool(void* mem, size_t bytes); 这个函数是上述两个函数的结合体,它的执行步骤如下: - 调用tlsf_create创建堆管理器 - 将初始化之后剩余的内存加入到堆管理器中,即将上图中control_t后面的空间加入到堆管理器中。 基于上述的三个函数,我们可以有两种方式初始化堆区 方式一: 将一片内存(空间大小大于control_t结构体的内存)传入tlsf_create_with_pool函数进行初始化 > 这种方式适用于内存块大小比较大的情况 例:创建一个大小为8kb的字符数组,然后传入函数进行初始化 ```c char heap[8192]; tlsf_create_with_pool(heap, sizeof(heap)); ``` 方式二: 先创建堆管理结构体,然后再将另一块内存加入内存池 例:两块内存,一块用于堆管理器初始化,另一块用于加入内存池 > 这种方式适用于有多块内存的情况 ```c char heap_control[4096]; char heap[4096]; tlsf_t tlsf = tlsf_create(heap_control); tlsf_add_pool(tlsf, heap, sizeof(heap)) ``` > 注:tlsf_t 类型 实质为 void * 类型 内存申请 内存涉及的函数 ```c void* tlsf_malloc(tlsf_t tlsf, size_t bytes); void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size); ``` 函数作用: 1.void* tlsf_malloc(tlsf_t tlsf, size_t bytes); 传入堆管理器的指针以及想要获取的内存大小,我们就可以获取到我们想要的内存空间,它的执行过程如下: 将bytes的大小转换成该大小在位图中的位置,如果该位置上有空闲空间能够分配,那么就将该空间分配出去,如果没有则寻找比它大的空间,并且这个空间是所有比bytes大的空间中最小的那个,找到了则对其进行分割并将目标大小的内存块分配出去,否则直接返回空。 具体的流程图如下:  2.void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size); 该函数最主要的作用就是重新分配一份指定大小内存空间,这里不作详细讲解。 内存释放 内存释放就涉及一个函数 ```c void tlsf_free(tlsf_t tlsf, void* ptr); ``` 它释放内存的步骤很好理解: 1. 如果释放内存的前一个内存块处于空闲状态,那么就将释放的内存与前一个内存块合并 2. 判断后一个内存的状态,如果空闲则与合并后的内存块再次合并 3. 将合并完成的内存块插入回内存池中 总结 基于这几个函数大家基本上是能够比较好的去使用tlsf算法管理内存了,如果大家在阅读文章时有什么疑问可以在评论区提问,我也会积极回复的。大家对tlsf算法感兴趣的话也可以阅读源码,它的源码真的超级工整好看,非常建议大家去阅读。 上一篇: python 有趣的项目 下一篇: 正品蓝导航—最全收入 版权声明: 本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。 本文网址:https://www.mushiming.com/mjsbk/2379.html 相关文章: python 有趣的项目2025-10-03 23:01:04 c语言if(!f)函数的使用方法?2025-10-03 23:01:04 oracle建视图语句2025-10-03 23:01:04 hikariconfig连接池2025-10-03 23:01:04 kvm虚拟化技术的实现方式2025-10-03 23:01:04 正品蓝导航—最全收入2025-10-03 23:01:04 dds协议编程2025-10-03 23:01:04 springboot版本升级2025-10-03 23:01:04 c语言中结构体数组的使用2025-10-03 23:01:04 js页面弹窗2025-10-03 23:01:04