静态内存管理

news2024/11/25 2:34:33

内存管理的基本概念

在一般的实时嵌入式系统中,由于实时性的要求,很少使用虚拟内存机制。所有的内存都需要用户参与分配,直接操作物理内存,所分配的内存不能超过系统的物理内存,所有的系统堆栈的管理,都由用户自己管理。

在嵌入式实时操作系统中,对内存的分配时间要求更为苛刻,分配内存的时间必须是确定的。一般内存管理算法是根据需要存储的数据的长度在内存中去寻找一个与这段数据相适应的空闲内存块,然后将数据存储在里面。而寻找这样一个空闲内存块所耗费的时间是不确定的,因此对于实时系统来说,这是不可接受的,实时系统必须要保证内存块的分配过程在可预测的确定时间内完成,否则实时线程对外部事件的影响也将变得不可确定。

不同的嵌入式系统具有不同的内存配置和时间要求。所以单一的内存分配算法只可能适合部分应用程序。因此,RT-Thread将内存分配作为可移植层面(相对于基本的内核代码部分而言),RT-Thread有针对性的提供了不同的内存分配管理算法,这使得应用于不同场景的设备可以选择适合自身内存算法。

RT-thread的内存管理模块通过对内存的申请、释放操作,来管理用户和系统对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。

RT-Thread的内存管理分为静态内存管理和动态内存管理。

  • 动态内存:在动态内存池中分配用户指定大小的内存块。
    优点:按需分配,在设备中灵活使用。
    缺点:内存池中可能出现碎片。
  • 静态内存:在静态内存池中分配用户初始化时预设大小的内存块。
    优点:分配和释放率高,静态内存池中无碎片。
    缺点:只能申请到初始化预设大小的内存块,不能按需申请。

静态内存管理的运行机制

内存池(Memory Pool)是一种用于分配大量大小相同的内存对象的技术。它可以极大加快内存分配/释放的速度。
内存池在创建时先向系统申请一大块内存,然后分成大小相等的多个小内存块,小内存块通过链表连接起来(此链表也称为空闲内存链表)。每次分配的时候,从空闲内存链表中取出表头上第一个内存块,提供给申请者。物理内存中允许存在多个大小不同的内存池,每一个内存池又由多个大小相同的空闲内存块组成。当一个内存池对象被创建时,内存池对象就被分配给了一个内存池控制块,内存池控制块的参数包括内存池名,内存缓冲区,内存块大小,块数以及一个等待线程列表。
内核负责给内存池分配内存池对象控制块,它同时也接收用户线程的分配内存块申请,当获得申请信息后,内核就可以从内存池中为线程分配内存块。内存池一旦初始化完成,内部的内存块大小将不能再调整。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速上手kettle(三)壶中可以放些啥?

快速上手kettle(三)壶中可以放些啥? 序言一 、kettle这壶能装些啥二、Access输入2.1 准备Acess数据库和表2.2 新建一个转换并设置2.3 启动转换预览数据 三、CSV文件输入3.1 准备csv文件,并将csv输入控件拖入工作区3.2 csv输入控件…

JDBC 拾枝杂谈—入门篇(通俗易懂)

目录 一、前言 二、JDBC介绍 1.基本概述 : 2.基本原理 : 三、JDBC模拟 1.模拟接口 : 2.模拟实现类 : 3.模拟测试类 : 4.模拟扩展 : 四、JDBC入门 1.编写JDBC程序的核心四部曲 : (全文背诵) 2.准备工作 : ①导入jar包 ②创建测试表 …

Sys Tick【转】

STM32学习及应用笔记一:SysTick定时器学习及应用 - STM32/STM8技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 1、SysTick究竟是什么? 关于SysTick在STM32的资料中并没有详细的介绍,这可能由于SysTick是ARM内核的东西。在…

在用对讲机中竟有近5成属于违规使用?

目前对讲机在很多领域和场景中都有着广泛的应用,包括建筑工地、宾馆饭店、住宅小区、大型商场超市、安保活动、物业管理等。 不过据非官方数据统计,在用对讲机中竟有近5成属于违规使用,这严重干扰了城市上空的无线电波秩序。 根据近年来无线…

多行 SQL 格式化换行调整(数据清洗、数据迁移)

多行 SQL 格式化换行调整(数据清洗、数据迁移) 原数据数据如下: select * from user_info;select * from user_info; select * from user_info;INSERT INTO student VALUES (107, zhao, NULL, 3, 北京); select * from user_info;INSERT INT…

哪个骨传导蓝牙耳机的好,几款高性能的骨传导蓝牙耳机分享清单

骨传导耳机是目前在运动领域最火热的产品,也是最适合运动的耳机,它的原理是通过颅骨将声音转化为神经冲动,通过内耳传至听觉中枢,因此不会对耳朵造成任何损伤,它同时也可以让耳朵更好地听到周围的声音。能够很好的提高…

hbuilderx+uniapp基于安卓的古汉语学习考试系统 微信小程序

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括古汉语学习软件APP的网络应用,在外国学习软件已经是很普遍的方式,不过国内的古汉语学习软件可能还处于起步阶段。古汉语学习软件具有古汉语、学习视频等…

2013 年一月联考逻辑真题

2013 年一月联考逻辑真题 真题(2013-26)-可能性推理的因果关系 26.某公司自去年初开始实施一项“办公用品节俭计划”,每位员工每月只能免费领用限量的纸笔等各类办公用品。年末统计时发现,公司用于各类办公用品的支出较上年度下降…

深度:解密智能汽车产业的3个世纪之问!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 汽车行业正在经历一场前所未有的变革,要理解这场深刻的汽车变革,我们从全新的电子电气架构,核心零部件的大量替换,到全新的制造工艺,探究电动车与燃油车的本质区别…

防雷工程中防雷等级的意义

在现代社会中,各种电子设备和通信系统已经成为我们生活中不可或缺的一部分。然而,雷击是这些设备和系统的一个常见问题,不仅会导致设备损坏,还可能对人们的生命财产造成威胁。因此,防雷措施变得尤为重要。 为了保护设…

OC 知识 多线程 GCD(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

Unity与Android交互(2)——常用交互方式

常用AndroidJavaClass/AndroidJavaObject实现C#调用Java代码,常用UnitySendMessage实现Java调用C#代码。 【调用代码示例】 Java代码为: package com.test.addtest;import com.unity3d.player.UnityPlayer;public class JavaTestClass {public static…

BM1684X移植自写算法记录

移植步骤------------------------------------------------------------------------ 首先搭建好自己的网络模型,并导出为onnx格式--具体可以参照--> https://github.com/warren-wzw/MNIST-pytorch.git 将onnx模型使用tpu-mlir工具转化为bmodel格式--具体可以…

2.3 TensorRT基于Entropy的校准

tensorRT的Entropy Calibration的伪代码,具体流程如下: for循环:遍历所有可能的分割点,从128到2048reference_distribution_P:将原始直方图bins按照当前分割点i进行切割,得到左侧的i个bin。outliers_count…

构建新型智能化智慧档案馆十防一体化解决技术方案

HONSOR现代化智慧档案馆智慧档案库房自动化温湿度环境安全监控系统方案【推介】 目前,我国档案正处于现代化科技飞升的起点,以物联网、大数据、智能化、云计算等为标志的网络充斥到社会生活、生产的各个角落。在我国,档案馆产生与发展经历了一…

为了搞懂ERP,我连问 ChatGPT 30个问题,通透!

我对ERP有很多的疑问,这次向ChatGPT请教,连问30个问题,瞬间觉得通透了很多,以下是我的问题和ChatGPT的回复,分为概念篇、架构篇和生态篇三部分,希望能带给你新的启示。 一、概念篇 1、ERP是什么&#xff1f…

图论与算法(5)图的广度优先遍历应用

1. 广度优先遍历 1.1 树的广度优先遍历 树的广度优先遍历(Breadth-First Traversal),也称为层次遍历,是一种按层次顺序逐级访问树节点的遍历方式。在广度优先遍历中,先访问树的根节点,然后按照从上到下、…

高频面试八股文用法篇(二) hive中几种排序类型区别

目录 排序函数 1、order by 2、sort by 3、distribute by 4、cluster by 总结 排序类型 1、order by order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 针对全局数据进行排序,所以最终只会有1个reduce,因…

开源 Golang 微服务入门一: HTTP 框架 Hertz

前言 从本篇笔记开始将介绍 Go 框架三件套(Web / RPC / ORM),框架的学习有助于后续课程的学习以及大项目的完成。本文主要介绍字节跳动的开源 Golang 微服务 HTTP 框架 Hertz。先了解一下三件套的相关基本知识,做一下铺垫&#x…