1825_ChibiOS的OSLIB中的存储分配器

2023-11-05 15:36

本文主要是介绍1825_ChibiOS的OSLIB中的存储分配器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

1. 之前有点不是很理解什么是静态OS,从这里基本上得到了这个答案。所谓的静态,其实就是内核之中不会使用Free以及Malloc这样的存储分配功能。

2. 虽然内核之中没有用到这样的存储动态分配机制,但是OSLIB提供了三种存储分配机制,这样软件可以在实现自己功能的时候采用这样的功能。

3. 这里有个参数配置是配置系统堆的大小的,如果设置为0那么将会使用可用的全部存储。这里可用的全部存储,其实是链接器根据链接文件分配的,这个在后面的内容中得到了证实。

4. 三种分配机制:内核分配器、存储池分配器、堆分配器。具体的特点这里有介绍,后面会独立在梳理。

5. 内核分配器,这个支持从上到下以及从下到上的分配模式,分配的速度非常快。并且,分配的时候还可以指定对齐以及偏移等属性。不过,这种存储分配方式不支持分配出去的存储的回收。

1. 接下来的一种存储的处理方式是系统堆分配,这种处理方式跟FreeRTOS有点类似。对应的堆其实是在APP中通过一个数组来占用的一块连续空间。这里同时也说了前面的一个理解,那就是堆大小参数为0的时候,堆的大小信息其实是来自于链接器根据链接文件分配的存储空间。

2. 不同的分配方式采用的接口是不同的。

3. 如果使用了偏移以及对齐等属性指定,可能会有一部分存储浪费。

1. 存储池分配器是按照块来分的,这种机制在其他的RTOS中也见过。比较好的一点是这种方式其实是可以避免存储碎片的产生的。

2. 存储池的实现机制其实是通过链表来实现的,但是释放的存储不会保证下一次再分配的时候还保持之前的内容不变。

1. 带有保护机制的存储池分配器,跟存储池的机制类似,只是链表的元素个数是固定的。

2. 在实现的时候,分配采用了计数器信号进行保护。这样,当存储申请发现存储不够的时候是会触发一个线程的等待的。

堆分配器其实是实现了一个跟标准库类似的free以及malloc的功能。

         最后给出来了几种分配器的各方面的对比。虽然说参数上有一定的衡量度,但是究竟哪一种方案是最好的是没有定论的。最合适的选择还得结合自己的使用需求来确定。

这篇关于1825_ChibiOS的OSLIB中的存储分配器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350803

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处