HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-静态内存

在这里插入图片描述

目录

  • 一、内存管理
  • 二、静态内存
    • 2.1、静态内存运行机制
    • 2.2、静态内存开发流程
    • 2.3、静态内存接口
    • 2.4、实例
    • 2.5、代码分析(待续...)
    • 坚持就有收货

一、内存管理

内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括内存的初始化、分配以及释放。

在系统运行过程中,内存管理模块通过对内存的申请/释放来管理用户和 OS 对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。

LiteOS-M 的内存管理分为静态内存管理和动态内存管理,提供内存初始化、分配、释放等功能。

动态内存:在动态内存池中分配用户指定大小的内存块。

  • 优点:按需分配。
  • 缺点:内存池中可能出现碎片。

静态内存:在静态内存池中分配用户初始化时预设(固定)大小的内存块。

  • 优点:分配和释放效率高,静态内存池中无碎片。
  • 缺点:只能申请到初始化预设大小的内存块,不能按需申请。

二、静态内存

2.1、静态内存运行机制

静态内存实质上是一个静态数组,静态内存池内的块大小在初始化时设定,初始化后块大小不可变更。

静态内存池由一个控制块 LOS_MEMBOX_INFO 和若干相同大小的内存块LOS_MEMBOX_NODE 构成。控制块位于内存池头部,用于内存块管理,包含内存块大小uwBlkSize,内存块数量 uwBlkNum,已分配使用的内存块数量 uwBlkCnt 和空闲内存块链表
stFreeList。内存块的申请和释放以块大小为粒度,每个内存块包含指向下一个内存块的指针pstNext。

请添加图片描述

2.2、静态内存开发流程

1、执行make menuconfig命令,进入Kernel —> Memory Management菜单,完成静态内存管理模块的配置。

配置项含义取值范围默认值依赖
LOSCFG_KERNEL_MEMBOX使能membox内存管理YES/NOYES
LOSCFG_KERNEL_MEMBOX_STATIC选择静态内存方式实现memboxYES/NOYESLOSCFG_KERNEL_MEMBOX
LOSCFG_KERNEL_MEMBOX_DYNAMIC选择动态内存方式实现memboxYES/NONOLOSCFG_KERNEL_MEMBOX

2、规划一片内存区域作为静态内存池。

3、调用 LOS_MemboxInit 初始化静态内存池。初始化会将入参指定的内存区域分割为 N 块(N 值取决于静态内存总大小和块大小),将所有内存块挂到空闲链表,在内存起始处放置控制头。

4、调用 LOS_MemboxAlloc 接口分配静态内存。系统将会从空闲链表中获取第一个空闲块,并返回该内存块的起始地址。

5、调用 LOS_MemboxClr 接口。将入参地址对应的内存块清零。

6、调用 LOS_MemboxFree 接口。将该内存块加入空闲链表。

2.3、静态内存接口

功能类别接口函数描述
初始化静态内存池LOS_MemboxInit初始化一个静态内存池,根据入参设定其起始地址、总大小及每个内存块大小
清除静态内存块内容LOS_MemboxClr清零指定静态内存块的内容
申请、释放静态内存LOS_MemboxAlloc从指定的静态内存池中申请一块静态内存块
LOS_MemboxFree释放指定的一块静态内存块
获取、打印静态内存池信息LOS_MemboxStatisticsGet获取指定静态内存池的信息,包括内存池中总内存块数量、已经分配出去的内存块数量、每个内存块的大小
LOS_ShowBox打印指定静态内存池所有节点信息(打印等级是LOS_INFO_LEVEL),包括内存池起始地址、内存块大小、总内存块数量、每个空闲内存块的起始地址、所有内存块的起始地址

2.4、实例

#define  BOXSIZE   10                           //内存块大小
#define  BLKNUM    3                            //内存块数量static UINT32 BoxMem[BOXSIZE*BLKNUM];           //定义一个数组作为静态内存池空间
UINT32 ret = LOS_OK;
/* 初始化内存池 */
ret = LOS_MemboxInit(&BoxMem[0],              /* 内存池地址 */BOXSIZE,                /* 内存块大小 */BLKNUM);                /* 内存块数量 */
if (ret != LOS_OK)
{printf("内存池初始化失败\n");
} else
{printf("内存池初始化成功!\n");
}/* 获取内存块空间 */
UINT32 *p_Num = NULL;                           //指向读写内存池地址的指针
p_Num = (UINT32*)LOS_MemboxAlloc(BoxMem); /* 向已经初始化的内存池分配内存 */
if (NULL == p_Num)
{printf("分配内存失败!\n");
} else
{printf("分配内存成功!\n");
}/* 清除内存块数据 */
LOS_MemboxClr(BoxMem, p_Num);               /* 清除在p_Num地址的内容 *//* 释放内存块使用空间 */
ret = LOS_MemboxFree(BoxMem, p_Num); //释放内存
if (LOS_OK == ret)
{printf("内存释放成功!\n");//内存释放成功!
} else
{printf("内存释放失败!\n");//内存释放失败!
}

2.5、代码分析(待续…)

坚持就有收货

在这里插入图片描述

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

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

相关文章

蓝桥杯每日一题------背包问题(三)

前言 之前求的是在特点情况下选择一些物品让其价值最大,这里求的是方案数以及具体的方案。 背包问题求方案数 既然要求方案数,那么就需要一个新的数组来记录方案数。动态规划步骤如下, 定义dp数组 第一步:缩小规模。考虑n个物品…

Spring Boot 笔记 017 创建接口_新增文章

1.1实体类增加校验注释 1.1.1 自定义校验 1.1.1.1 自定义注解 package com.geji.anno;import com.geji.validation.StateValidation; import jakarta.validation.Constraint; import jakarta.validation.Payload; import jakarta.validation.constraints.NotEmpty;import jav…

Qt:自定义信号,信号emit,传参问题,信号槽与moc

一、自定义信号,信号emit 1、自定义信号 在头文件中 加入signals: 就可以编写信号 2、emit emit的作用是通知信号发生 二、跨UI控件传参 每次按Dialog添加按钮主控件数字会增长 // .h private slots:void on_btnAdd_clicked(); signals:void sign…

《区块链公链数据分析简易速速上手小册》第8章:实战案例研究(2024 最新版)

文章目录 8.1 案例分析:投资决策支持8.1.1 基础知识8.1.2 重点案例:股票市场趋势预测准备工作实现步骤步骤1: 加载和准备数据步骤2: 特征工程步骤3: 训练模型步骤4: 评估模型 结论 8.1.3 拓展案例 1:基于情感分析的投资策略准备工作实现步骤步…

C# winfrom中NPOI操作EXCEL

前言 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。 2.忘了告诉大家npoi是做什么的了,npoi 能够读…

每日五道java面试题之java基础篇(八)

目录: 第一题.CopyOnWriteArrayList的底层原理是怎样的第二题.Java中有哪些类加载器第三题. 说说类加载器双亲委派模型第四题. GC如何判断对象可以被回收第五题.JVM中哪些是线程共享区 第一题.CopyOnWriteArrayList的底层原理是怎样的 ⾸先CopyOnWriteArrayList内部…

游戏开发的编程算不算是IT行业中难度最大的?

游戏开发的编程算不算是IT行业中难度最大的? 游戏作为当今数字娱乐领域中最引人入胜的产品之一,其背后所依托的程序开发能力也备受关注。作为游戏开发过程中的“幕后英雄”,编程工作的难易程度直接影响到游戏的质量体验和开发效率。 关于游…

Python dict函数

Python中的字典(dict)是一种非常重要且灵活的数据结构,它提供了键值对的存储和访问机制。字典函数(dict())作为创建字典的工具之一,可以从多种数据结构中创建字典对象。在本文中,将深入探讨dict…

算法刷题:有效三角形个数

有效三角形个数 .题目链接题目详情算法原理补充知识点双指针:对撞指针 我的答案 . 题目链接 有效三角形个数 题目详情 算法原理 补充知识点 有效三角形需要满足的条件: ab>cac>bbc>a 其实在满足1的时候,c是最大的,那么2和3是显然成立的,因此我们可以这样解题: 对…

华为OD机试 - 分配土地( Python C C++ JavaGo JS PHP)

题目描述 从前有个村庄,村民们在各种田地上插上小旗子,每个旗子上都标识了一个数字。现在,村民们想要找出一个包含相同数字的最小矩形区域,并将这块土地分配给对村庄做出巨大贡献的村民。我们需要找出这个矩形区域的最大面积。 …

分享个CSDN自定义模块模板

在开了会员或升级为博客专家后&#xff0c;才有这个自定义模块的权限 当然这也是为了有很多粉丝的博主更方便的推广一些业务场景展示的橱窗 自定义模块管理 下面就列下我使用的自定义模块相关的代码 <marquee><b><font color"#8A2BE2">不</…

[WinForm开源]概率计算器 - Genshin Impact(V1.0)

创作目的&#xff1a;为方便旅行者估算自己拥有的纠缠之缘能否达到自己的目的&#xff0c;作者使用C#开发了一款小型软件供旅行者参考使用。 创作说明&#xff1a;此软件所涉及到的一切概率与规则完全按照游戏《原神》(V4.4.0)内公示的概率与规则&#xff08;包括保底机制&…

猫头虎分享已解决Bug || DNS解析问题(DNS Resolution Issue):DNSLookupFailure, DNSResolveError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

大学生必备搜题软件推荐?找题不再难!好用的大学搜题工具推荐 #媒体#职场发展

在快节奏的大学生活中&#xff0c;合理利用这些日常学习工具&#xff0c;能够让你事半功倍&#xff0c;提高学习效率。 1.茱莉亚公开课 茱莉亚公开课APP不是一款针对所有人的应用&#xff0c;是针对对艺术有特殊爱好和艺术领域的人 茱莉亚音乐学院里面都是世界著名的茱莉亚音…

Vulhub kali 环境安装教程

进入 root 权限 sudo su 更新软件 apt-get update 安装 HTTPS 协议和 CA 证书 apt-get install -y apt-transport-https ca-certificates 安装 docker apt install docker.io 查看 docker 是否安装完成 docker -v 安装 pip apt-get install python3-pip 安装 docker-compose do…

Linux第57步_“linux系统镜像”和“根文件系统”重新打包小结

实时总结是很重要的&#xff0c;时间久了&#xff0c;可能会遗忘。下面是“linux系统镜像”和“根文件系统”重新打包小结。 1、linux系统镜像重新打包 在第1次完成linux系统镜像打包后&#xff0c;再重新打包就很容易了 将“bootfs”重新打包 准备打包文件: 输入“cd /ho…

(10)Hive的相关概念——文件格式和数据压缩

目录 一、文件格式 1.1 列式存储和行式存储 1.1.1 行存储的特点 1.1.2 列存储的特点 1.2 TextFile 1.3 SequenceFile 1.4 Parquet 1.5 ORC 二、数据压缩 2.1 数据压缩-概述 2.1.1 压缩的优点 2.1.2 压缩的缺点 2.2 Hive中压缩配置 2.2.1 开启Map输出阶段压缩&…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据。特点&#xff1a;必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键&#xff0c;主键索引就是聚集索引。 2. 如果不存在主键&#xff0c;将使用第一个唯一&#xff08;UNIQUE&am…

Linux环境中的git

目录 1.要使用git&#xff0c;首先要安装git 2.首次使用git需要做的操作 3.git操作 1.要使用git&#xff0c;首先要安装git 指令&#xff1a;sudo yum install -y git 2.首次使用git需要做的操作 在gitee网页&#xff0c;在你的仓库中找到&#xff1a; 先将下面两行代码分别…

高中生护眼台灯怎么选?教育部认可护眼灯品牌

随着孩子步入更高的年级&#xff0c;学业压力也会越来越繁重&#xff0c;随之带来的也是更长时间的用眼和高近视率。众所周知&#xff0c;高中是孩子学业最繁忙的一段时期&#xff0c;同时也是青少年近视的重灾区&#xff0c;不少学生因为每天过度用眼&#xff0c;再加上缺少户…