内存分配
文章平均质量分 89
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
-
内存管理学习
内存池控制块是操作系统用于管理内存池的一个数据结构,它会存放内存池的一些信息,例如内存池数据区域开始地址,内存块大小和内存块列表等,也包含内存块与内存块之间连接用的链表结构,因内存块不可用而挂起的线程等待事件集合等。当用户线程要再分配一个64字节的内存块时,但此lfree指针指向的内存块只有32字节并不能满足要求,内存管理器会继续寻找下一内存块,当找到再下一块内存块,128字节时,它满足分配的要求。当需要分配内存块时,将从这个大的内存块上分割出相匹配的内存块,然后把分割出来的空闲内存块还回给堆管理系统中。原创 2023-12-22 20:13:52 · 1007 阅读 · 0 评论 -
RT-Thread 内存管理
内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为电脑的内存。而外部存储空间内所保存的内容相对来说比较固定,及时掉电后数据也不会丢失,这就是通常讲的ROM(只读存储器),可以把它理解为电脑的硬盘。一些数据需要的内存大小需要在程序运行过程中根据实际情况确定,这就要求系统具有对内存空间进行动态管理的能力。原创 2023-12-04 11:54:11 · 1051 阅读 · 0 评论 -
LiteOS内存管理:TLSF算法
还以上述搜索大小为69字节的空闲块为例,查找范围稍微大一点儿的,如[70,72],这样设计的好处是[70,72]对应的空闲块链中每一块都能满足需求,不需要检索空闲块链表找到最小的,而是直接取空闲块链中第一块即可。分级空闲块链表(Segregated Free List)的设计思想是将空闲块按照大小分级,形成了不同块大小范围的分级(class),组内空闲块用链表链接起来。隐式链表,链接所有内存块,只记录内存块大小,由于内存块相连,通过头结点指针加内存块大小即可得到下一个内存块的位置。原创 2023-12-02 11:00:44 · 1383 阅读 · 0 评论 -
TLSF算法概念,原理,内存碎片问题分析
TLSF(Two-Level Segregated Fit,两级分割适应算法)。将内存大小按2的幂次方划分一个粗粒度的范围,如一个72字节的空闲内存的fl是6(72介于26与27之间)。在第一级的基础上做线性化的细粒度划分,分为多少等份由可配置的SLI参数确定,在32bit的系统中,最优的SLI为4或者5。若为4,则等分为24=16份,每一份分割叫做Segregated list(分割链表)。原创 2023-12-02 09:42:50 · 740 阅读 · 0 评论 -
RT-Thread 内存管理(一)
使用memheap内存管理可以简化系统存在多个内存堆时的使用:当系统中存在多个内存堆的时候,用户只需要在系统初始化时将多个所需的memheap初始化,并开启memheap功能就可以很方便地把多个memheap(地址可不连续)粘合起来用于系统的heap分配。如果此时zone的空闲链表指示出zone的所有内存块都已经释放,即zone是完全空闲的,那么当zone链表中全空闲zone达到一定数目后,系统就会把这个全空闲的zone释放到页面分配器中区。原创 2023-10-30 21:12:08 · 304 阅读 · 0 评论 -
TLSF——一种高效的内存池实现
其实TLSF是对Segregated Free List的改进。如果线性分割,则O(1)的时间复杂度就可以找对应的FreeBlock,但是需要维护的槽位过多,设想线性分割的Segregated Free Lists,最大内存块为1G,碎片Fragment限定到16Byte内,则需要划分1G/16=2^26个槽位。原创 2023-10-28 15:56:30 · 229 阅读 · 1 评论 -
内存管理:TLSF算法
73],这样设计的好处就是对应的空闲块链中每一块都能满足需求,不需要检索空闲块链表找到最小的,而是直接取空闲块链中第一块即可。分级空闲块链表(Segregated Free List)的设计思想是将空闲块按照大小分级,形成了不同块大小范围的分级,组成空闲块用链表链接起来。每次分配时先按分级大小范围查找到相应链表,再从相应链表挨个检索合适的空闲块,如果找不到,就在大小范围更大的一级查找,直到找到合适的块分配出去。还以上述搜索大小为69字节的空闲块为例,Good-fit并不是找到[68。原创 2023-10-28 10:55:21 · 461 阅读 · 0 评论