当前位置:网站首页 > 技术博客 > 正文

tls包含哪些协议



TLSF算法是专门用作内存管理的算法,作为内存管理的算法它就逃不开初始化申请释放操作,那么这里就简单介绍一下这几个操作,让大家更好的上手使用这个开源算法。
如果大家不了解这个算法的话可以先阅读这篇文章:
TLSF – 内存管理中的超级英雄!
文章会按照以下顺序介绍,大家按需阅读:

  1. 源文件获取
  2. 堆区初始化
  3. 内存申请
  4. 内存释放

源代码可以直接从github上获取:
https://github.com/mattconte/tlsf
获取成功后,我们可以直接将tlsf.h和tlsf.c文件导入到我们的工程中就可以直接使用了。

首先介绍一下堆区初始化设计的函数

 

函数作用:

1.tlsf_t tlsf_create(void* mem);

screenshot_image.png

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的字符数组,然后传入函数进行初始化

 

方式二:
先创建堆管理结构体,然后再将另一块内存加入内存池
例:两块内存,一块用于堆管理器初始化,另一块用于加入内存池

这种方式适用于有多块内存的情况

 

注:tlsf_t 类型 实质为 void * 类型

内存涉及的函数

 

函数作用:

1.void* tlsf_malloc(tlsf_t tlsf, size_t bytes);

传入堆管理器的指针以及想要获取的内存大小,我们就可以获取到我们想要的内存空间,它的执行过程如下:
将bytes的大小转换成该大小在位图中的位置,如果该位置上有空闲空间能够分配,那么就将该空间分配出去,如果没有则寻找比它大的空间,并且这个空间是所有比bytes大的空间中最小的那个,找到了则对其进行分割并将目标大小的内存块分配出去,否则直接返回空。
具体的流程图如下:

screenshot_image.png

2.void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size);

该函数最主要的作用就是重新分配一份指定大小内存空间,这里不作详细讲解。

内存释放就涉及一个函数

 

它释放内存的步骤很好理解:

  1. 如果释放内存的前一个内存块处于空闲状态,那么就将释放的内存与前一个内存块合并
  2. 判断后一个内存的状态,如果空闲则与合并后的内存块再次合并
  3. 将合并完成的内存块插入回内存池中

基于这几个函数大家基本上是能够比较好的去使用tlsf算法管理内存了,如果大家在阅读文章时有什么疑问可以在评论区提问,我也会积极回复的。大家对tlsf算法感兴趣的话也可以阅读源码,它的源码真的超级工整好看,非常建议大家去阅读。

  • 上一篇: java在线编程工具
  • 下一篇: h-swish激活函数
  • 版权声明


    相关文章:

  • java在线编程工具2024-12-29 15:00:59
  • linux iocp2024-12-29 15:00:59
  • qt qfile read2024-12-29 15:00:59
  • 线程间 通信2024-12-29 15:00:59
  • 无锁编程多线程 不用锁2024-12-29 15:00:59
  • h-swish激活函数2024-12-29 15:00:59
  • python xlwt写入数据2024-12-29 15:00:59
  • seo站内优化分为哪几个方面2024-12-29 15:00:59
  • linux md5sum命令2024-12-29 15:00:59
  • 移位指令应用实例2024-12-29 15:00:59