自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 Heap_4 源码解析

FreeRTOS heap_4内存管理模块采用首次适配算法实现动态内存分配,通过自动合并相邻空闲块机制减少内存碎片。其核心特点包括线程安全的临界区保护、内存对齐保证以及实时统计监控功能。内存块使用最高位标志位标识分配状态,并通过prvInsertBlockIntoFreeList函数实现智能的空闲块合并逻辑:在释放内存时,该函数会检查前后相邻块地址连续性,将可合并的块整合为更大的空闲块,从而有效优化内存利用率。算法采用升序排列的空闲链表结构,在保证内存分配确定性的同时显著降低了碎片化问题。

2025-11-08 00:20:05 980

原创 Heap_3 源码解析

FreeRTOS的heap_3是最简单的内存管理方案,它直接封装标准C库的malloc()和free()函数,通过临界区保护实现线程安全。pvPortMalloc()暂停所有任务后调用malloc分配内存,失败时可触发回调;vPortFree()释放内存前检查空指针。优点是实现简单直接,缺点是不含复杂内存管理算法,不适合实时性要求高的系统。该方案适合简单应用场景,但缺乏高级功能如碎片整理。

2025-11-03 20:03:58 137

原创 Heap_2 源码解析

本文介绍了FreeRTOS中的heap_2内存管理机制,采用可变大小块和首次适配算法。内存块通过单向链表连接,按大小升序排列,使用最高位标记分配状态。初始化时建立xStart和xEnd两个哨兵节点,xStart指向对齐后的堆起始地址,xEnd标记堆末尾。首个空闲块占据整个堆空间并指向xEnd。该机制支持块分割但不合并空闲块,适用于需要动态内存分配但碎片问题不严重的场景。

2025-11-02 22:03:18 921

原创 Heap_1 源码解析

heap_1内存管理方案采用顺序分配策略,仅支持内存申请不支持释放。其核心机制包括:1) 内存对齐处理,通过位运算检查并补齐申请空间以满足对齐要求;2) 原子化分配流程,使用临界区保护分配操作,通过xNextFreeByte指针顺序标记可用内存位置;3) 严格的条件检查,包括初始化验证、空间充足性检测和溢出防护。该方案实现简单高效,适合不需要动态释放内存的场景,但无法回收已分配内存。分配失败时可触发用户自定义的hook函数进行处理。

2025-11-01 20:21:22 948

原创 C实现 冒泡排序(排序入门)

是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

2023-09-28 22:23:18 97

原创 C++实现 快速排序

函数定义了两个指针 left 和 right,分别初始化为 strat 和 end。接下来,左右指针开始分别从左侧和右侧遍历数组arr,找到需要交换的元素并将其交换位置。left++;right--;第一个while循环,left指针一直往右移动,直到找到大于pivot与arr[right]应该交换的元素。第二个while循环,right指针一直往左移动,直到找到小于pivot与arr[left]应该交换的元素。

2023-06-21 21:55:50 14061 3

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除