首页 > 系统相关 >freertos 内存管理

freertos 内存管理

时间:2022-12-08 17:37:28浏览次数:38  
标签:heap freertos 管理 vPortFree pvPortMalloc free 内存 Heap


每当任务,队列或是信号量被创建时,内核需要进行动态内存分配。当内核请求内存时,其调用 pvPortMalloc()而不是直接调用 malloc();当释放内存时,调用 vPortFree()而不是直接调用 free()。 pvPortMalloc()具有与 malloc()相同的函数原型; vPortFree()也具有与 free()相同的函数原型。


目前最新版FreeRTOS 自带有5种 pvPortMalloc()与 vPortFree()实现范例
 heap_1.c, heap_2.c, heap_3.c, heap_4.c, heap_5.c——这三个文件都放在目录 FreeRTOS\Source\Portable\MemMang 中。

freertos 内存管理_应用程序

原文解释:

heap_1 - the very simplest, does not permit memory to be freed
heap_2 - permits memory to be freed, but not does coalescence adjacent free blocks.
heap_3 - simply wraps the standard malloc() and free() for thread safety
heap_4 - coalescences adjacent free blocks to avoid fragmentation. Includes absolute address placement option
heap_5 - as per heap_4, with the ability to span the heap across multiple non-adjacent memory areas


Heap_1.c 实现了一个非常基本的 pvPortMalloc()版本,而且没有实现 vPortFree()。
如果应用程序不需要删除任务,队列或者信号量,则具有使用 heap_1 的潜质。Heap_1
总是具有确定性。

Heap_2.c 也是使用了一个由 configTOTAL_HEAP_SIZE 定义大小的简单数组。不同于 heap_1 的是, heap_2 采用了一个最佳匹配算法来分配内存,并且支持内存释放。
由于声明了一个静态数组,所以会让整个应用程序看起来耗费了许多内存——即使是在数组没有进行任何实际分配之前。最佳匹配算法保证 pvPortMalloc()会使用最接近请求大小的空闲内存块。


Heap_2.c 并不会把相邻的空闲块合并成一个更大的内存块,所以会产生内存碎片——如果分配和释放的总是相同大小的内存块,则内存碎片就不会成为一个问题。
Heap_2.c 适合用于那些重复创建与删除具有相同栈空间任务的应用程序。 Heap_4.c就优化合并了内存碎片问题。

Heap_3.c 简单地调用了标准库函数 malloc()和 free(),但是通过暂时挂起调度器使得函数调用备线程安全特性。

标签:heap,freertos,管理,vPortFree,pvPortMalloc,free,内存,Heap
From: https://blog.51cto.com/u_6958388/5922947

相关文章

  • 多厂商设备高效自动配置与管理
    ​ 随着企业向云迁移、5G落地、物联网设备激增、网络爆炸、网络流量变得海量复杂,企业经常会遇到网络拥塞和服务质量低等一系列问题,加强网络管理和改善网络的运行己成为当......
  • [附源码]Python计算机毕业设计Django汽车租赁管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Windows平台下Vim安装插件(采用内置的包管理器)
    需要提前说明的一些事情本人电脑环境为Windows11,vim采用包管理器scoop下载安装,版本为9.0。在尝试为vim安装插件过程中,参考了知乎上的一篇文章如何安装VIM插件,其中提到在V......
  • 查看内存 磁盘 cpu个数 IO使用情况
    查看内存:free-h或者cat/proc/meminfo|grepMemTotal查看内存使用情况:free-g查看磁盘:df-hl查看物理CPU内核的个数:cat/proc/cpuinfo|grep“cpucores”|un......
  • Spring:资源管理
    java标准资源管理职责说明面向资源文件系统、artifact(jar、war、ear文件)以及远程资源(HTTP、FTP等)API整合ClassLoader#getResource、java.io.File、java.ne......
  • python 包管理
    python官方的第三方库的仓库:​​https://pypi.org/​​ pip是python的包管理工具pip--version#查看当前版本 安装pipinstall-Upip#升级pippipinstall包名==1.0.4......
  • 如何为管理者设计 360 评估调查题目?
    宣布360评估通常会使管理人员不稳定。同事、下属、管理层甚至客户和供应商通过预先制定的问卷来反馈。360评估可以采用多种形式:从50到300多个问题,例如使用开放式或......
  • Ubuntu20.04使用valgrind进程内存分析
     一、安装在官网https://valgrind.org/downloads/上下载软件,目前最新版本是Valgrind3.20.0。然后按照下面的命令解压安装sudoapt-getinstallautomakesudoapt-......
  • 保障房管理系统,高端住宅长租化趋势显现
    版权声明:本文章由“厦门多米克信息技术有限公司”编辑组汇编而成,未经授权和许可,任何个人或媒体不得对本网站的文章及其他信息资料予以复制、转载、抄袭、改编。厦门多米克......
  • Kafka技术专题之「性能调优篇」消息队列服务端出现内存溢出OOM以及相关性能调优实战分
    内存问题本篇文章介绍Kafka处理大文件出现内存溢出java.lang.OutOfMemoryError:Directbuffermemory,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮......