动态内存管理——tlsf

article/2025/10/16 22:23:17

定义

TLSF(全称Two-Level Segregated Fit)

源码

https://github.com/mattconte/tlsf

代码

结构体

typedef struct block_header_t {/* 指向上一个物理块。*/struct block_header_t * prev_phys_block;/* 此块的大小,不包括块头。*/size_t size;/* 下一个和上一个空闲块。*/struct block_header_t * next_free;struct block_header_t * prev_free;
} block_header_t;/*
**由于块大小始终至少是 4 的倍数,因此两个最小
** 大小字段的重要位用于存储块状态:
** - 位 0:块是忙还是空闲
** - 位 1:前一个块是忙碌还是空闲
*/static const size_t block_header_free_bit = 1 << 0;
static const size_t block_header_prev_free_bit = 1 << 1;/*已经使用的块已经使用的内存大小*/
static const size_t block_header_overhead = sizeof(size_t);/* 用户数据直接在已使用块中的大小字段之后开始。*/
static const size_t block_start_offset =offsetof(block_header_t, size) + sizeof(size_t);/*
*一个自由块的最小大小是整个存储空间减去头部说明
*更大的空间索引是FL_INDEX
*/
static const size_t block_size_min =sizeof(block_header_t) - sizeof(block_header_t *);
static const size_t block_size_max = tlsf_cast(size_t, 1) << FL_INDEX_MAX;/* TLSF 控制结构。*/
typedef struct control_t {/* 空列表指向此块以指示它们是空闲的。*/block_header_t block_null;/* 位图空闲列表。*/unsigned int fl_bitmap;unsigned int sl_bitmap[FL_INDEX_COUNT];/* 空闲列表的控制链表。*/block_header_t * blocks[FL_INDEX_COUNT][SL_INDEX_COUNT];
} control_t;/* 在执行指针算术时用于强制转换的类型。*/
typedef ptrdiff_t tlsfptr_t;

堆的创建

lv_tlsf_t lv_tlsf_create_with_pool(void * mem, size_t bytes)
{/*从mem开始初始化control_t*/lv_tlsf_t tlsf = lv_tlsf_create(mem);
/*堆开始空闲块开始的首地址要添加control_t的偏移,大小也是要减去control_t的大小*/lv_tlsf_add_pool(tlsf, (char *)mem + lv_tlsf_size(), bytes - lv_tlsf_size());return tlsf;
}
  • lv_tlsf_t tlsf = lv_tlsf_create(mem)作用:
    • 将bitmap清0,所有链表置空(指向block_null)
  • *lv_tlsf_add_pool(tlsf, (char )mem + lv_tlsf_size(), bytes - lv_tlsf_size())
    • 作用:初始化两个block,一个位于开头,作为最初也是最大的block,另一个位于结尾,是哨兵block
    • 将开头的那个block插入(头插)空闲链表

在这里插入图片描述

实例

  printf("Main Start!\n");// tlsf_destroy(tlsf);tlsf = tlsf_create_with_pool(0x13000000, 128 * 1024);char *name = tlsf_malloc(tlsf, 100);printf("name= %p\n ", name);for (int i = 0; i < 100; i++) {name[i] = i;printf("%d = 0x%x, ", i, name[i]);}printf("\n over \n");tlsf_free(tlsf, name);lv_tlsf_destroy(tlsf);

参考:
1、https://blog.csdn.net/gzxb1995/article/details/124504705
2、https://www.jianshu.com/p/01743e834432


http://chatgpt.dhexx.cn/article/uLH9rZeO.shtml

相关文章

SSL与TLS协议详解

写在最前面的话&#xff1a;这篇文章是我借鉴了Eric Rescorla的《SSL and TLS》一书之后对该书的前半部分内容整合而做。如您需要开发围绕SSL、TLS的程序建议参阅原著或者RFC相关文档。 一、关于SSL、TLS与HTTPS的三两事 什么是SSL、TLS&#xff1a; 众所周知&#xff0c;真…

TLS协议/SSL协议

历史背景 SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层&#xff0c;最初是由网景公司&#xff08;Netscape&#xff09;研发&#xff0c;后被IETF&#xff08;The Internet Engineering Task Force - 互联网工程任务组&#xff09;标准化后写入&#xf…

TLS加密体系

谈到这个词&#xff0c;可能大家的第一印象就是加密&#xff0c;而对TLS了解甚少。那么在介绍 TLS 加密体系之前先来讲一讲加密。 一提到加密&#xff0c;可能很多人脑海中会浮现出电视剧里特务的场景&#xff0c;他们拿出一台电报机&#xff0c;“滴滴滴滴”按下情报报文&…

TLS概述

握手过程 可分为5步&#xff08;使用Diffie – Hellman算法&#xff09;&#xff1a; 第一步&#xff0c;浏览器给出协议版本号、一个客户端生成的随机数&#xff08;Client random&#xff09;&#xff0c;以及客户端支持的加密方法。 第二步&#xff0c;服务器确认双方使用的…

SSL与DTLS简介

目录 SSL简介 DTLS-基于UDP的TLS 记录层 传输层映射 早期我们在访问web时使用HTTP协议&#xff0c;该协议在传输数据时使用明文传输&#xff0c;会带来了以下风险&#xff1a; 信息窃听风险&#xff0c;第三方可以获取通信内容&#xff1b; 信息篡改风险&#xff0c;第三方…

TLS/SSL 协议

TLS/SSL 协议的工作原理 TLS/SSL 协议的工作原理 • 身份验证 • 保密性 • 完整 TLS/SSL 发展 TLS 协议 • Record 记录协议 • 对称加密 • Handshake 握手协议 • 验证通讯双方的身份 • 交换加解密的安全套件 • 协商加密参 TLS 安全密码套件解 对称加密的工作原理&am…

SSL/TLS详解

SSL/TLS详解 1. 前言 ​ 我们都知道Https就是加密协议中采用了SSL/TLS协议&#xff0c;这是面试常客&#xff0c;如果被问到了&#xff0c;你懂的越多&#xff0c;答得越深&#xff0c;你的面评相应来说也就会越高&#xff0c;对于SSL/TLS&#xff0c;我们不仅仅要知道其为数…

TLS协议简单介绍

TLS简介 介绍 TLS&#xff08;Transport Layer Security&#xff09;即安全传输层协议&#xff0c;在两个通信应用程序之间提供保密性和数据完整性。最典型的应用就是HTTPS。HTTPS&#xff0c;即HTTP over TLS&#xff0c;就是安全的HTTP&#xff0c;运行在HTTP层之下&#x…

esp-idf的内存管理——tlsf之上的封装

目录 1 为什么要封装2 先看结构2.1 multi heapnote1note2 2.2 heap caps2.3 层次关系 3 再看接口3.1 内存的申请3.2 内存的释放3.2 堆完整性检测3.3 其它 参考 1 为什么要封装 封装通常会降低效率&#xff0c;但能够带来诸如通用性提升等好处&#xff0c;idf在tlsf的基础上增加…

SSL/TLS 证书管理

SSL 证书发现 随着组织的 IT 基础架构的扩展&#xff0c;他们为每台计算机获取证书以保护其资源和域。此外&#xff0c;开发人员通常会创建许多自签名证书&#xff0c;以便在产品的开发阶段保护内部网络。组织通常最终会拥有数千个证书。自动发现证书提供了对证书基础结构的完…

TLS协议。

IPSec通过安全关联实现IP分组安全关联两端之间的安全传输过程&#xff0c;TLS通过建立安全连接实现数据在两个应用进程之间的安全传输过程。TLS建立安全连接时&#xff0c;实现安全连接两端应用进程之间的双向身份鉴别过程&#xff0c;保证经过安全连接传输的数据的保密性和完整…

SSL/TLS协议

SSL/TLS协议 文章目录 SSL/TLS协议1 协议历史2 协议的目标3 SSL体系结构4 两个主要的协议5 SSL的两个重要概念6 会话状态参数7 连接状态参数8 SSL Record Protocol9 SSL记录协议中的操作10 SSL握手协议使用的消息11 SSL握手协议的流程 1 协议历史 1994年Netscape开发了SSL(Sec…

tls协议

tls 前言一、TLS 协议的组成二、ECDHE1.连接过程 三、TLS1.31.过程 前言 tls是ssl协议的标准化&#xff0c;处于应用层(5层架构)和会话层(OSI)&#xff0c;有着rsa方式和ecdhe两种&#xff0c; 一、TLS 协议的组成 握手协议&#xff1a;负责在客户端和服务器之间协商决定密码算…

TLS协议详解!

TLS简介 SSL 即安全套接字层&#xff0c;它在 OSI 七层网络模型中处于第五层&#xff0c;SSL 在 1999 年被 IETF(互联网工程组)更名为 TLS &#xff0c;即传输安全层&#xff0c;直到现在&#xff0c;TLS 一共出现过三个版本&#xff0c;1.1、1.2 和 1.3 &#xff0c;目前最广…

esp-idf的内存管理——tlsf算法

目录 1 最初还不是tlsf2 为什么要引入tlsf3 tlsf算法概览4 idf中使用的tlsf算法的设计与实现4.1 先看结构4.1.1 管理内存块的结构4.1.2 管理tlsf堆的结构 4.2 优化内存块的元数据开销4.3 一二级位图索引的计算4.4 tlsf堆的创建与销毁4.4.1 tlsf堆的创建4.4.2 tlsf堆的销毁 4.5 …

TLSF算法1:二级索引的计算

TLSF算法1:二级索引的计算 一、什么是TLSF算法二,f的确定三、s的确定四、实验结果一、什么是TLSF算法 在嵌入式系统中,内存需要在分配和释放时有一个确定的相应时间,才能进一步分析其实时任务的可调度性。因此TLSF算法是一个十分适用嵌入式领域的动态内存分配算法。在关于T…

TLSF 内存分配算法详解

文章目录 1. DSA 背景介绍1.1 mmheap1.2 mmblk 2. TLSF 原理2.1 存储结构2.2 内存池初始化2.3 free2.4 malloc 参考资料 1. DSA 背景介绍 动态内存管理算法 DSA&#xff0c;Dynamic storage allocation。RTOS 一般情况下动态内存使用malloc申请分配&#xff0c;但是存在两个缺…

tlsf算法-概念、原理、内存碎片问题分析

文章目录 一、tlsf算法介绍二、tlsf代码分析2.1 mapping_search2.2 search_suitable_block 三、参考链接 一、tlsf算法介绍 tlsf&#xff08;全称Two-Level Segregated Fit&#xff0c;内存两级分割策略算法&#xff09;&#xff0c;第一级&#xff08;first level&#xff0c…

数学建模系列-优化模型(三)---排队论模型

所谓排队论模型&#xff0c;就是指一个模型中可根据交易简单的需要分为三个部分&#xff1a; &#xff08;1&#xff09;顾客造访 &#xff08;2&#xff09;服务顾客时间 &#xff08;3&#xff09;若不空闲&#xff0c;则顾客需要排队 下面是对于排队论模型的建模以及解决方法…

无线传感器网络:排队论(Queueing Theory)模型

文章目录 The arrival ProcessQueueing SystemThe M/M/1 queueThe M/M/1/N queue References 排队理论已被用于评估通信网络的性能很多年了。早在1917年&#xff0c;丹麦数学家 Erlang 就将该理论用于电话交换机的设计&#xff0c;并开创了现在著名的 Erlang-B 和 Erlang-C 公式…