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

news2025/1/21 10:16:42

在这里插入图片描述

目录

  • 一、内存管理
  • 二、静态内存
    • 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.coloradmin.cn/o/1446886.html

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

相关文章

微信小程序(四十一)wechat-http的使用

注释很详细,直接上代码 上一篇 新增内容: 1.模块下载 2.模块的使用 在终端输入npm install wechat-http 没有安装成功vue的先看之前的一篇 微信小程序(二十)Vant组件库的配置- 如果按以上的成功配置出现如下报错先输入以下语句 …

【开源】JAVA+Vue+SpringBoot实现学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

【Time Series】基于Transformer的时间序列预测代码实战

一、简介 在上篇《【Time Series】LSTM代码实战》中, 采用的是LSTM方法实现时序预测任务。自Transformer问世以来,在各个CV/NLP两个领域不断迭代不断屠榜,但在Time Series Predict(TSP)类型的任务中,从21年以后开始研究才慢慢红火…

五.实战软件部署 1-3实战章节-前言MYSQL 5.7版本在centos系统安装MYSQL 8.0版本在centos系统安装

目录 五.实战软件部署 1-实战章节-前言 五.实战软件部署 2-MYSQL 5.7版本在centos系统安装 1-配置yum仓库 2-使用yum安装mysql 3-安装完成后,启动mysql并配置开机自启动 4-检查mysql的运行状态 --配置 1-获取mysql的初识密码 2-登录mysql数据库系统 3-修改…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

【达芬奇调色教程】

文章目录 第一章: 达芬奇软件基本了解1. 项目管理2. 新建项目3. 项目设置面板4. 偏好设置5. 界面布局 第一章: 达芬奇软件基本了解 1. 项目管理 前面的滑块可以控制缩略图的大小 2. 新建项目 项目管理器在操作本项目的时候,可以查看其他项目…

音视频基础

本篇文章我们来讲一下音视频基础 像素点: 将以下图片的美女眼睛放大 能够看到一个一个的小方块 这就是像素点 照片像素宽像素点*高像素点 像素点 代码实例&#xff1a; #include <opencv2/opencv.hpp>int main() {// 创建一个200x100的黑色图像cv::Mat image(100, 200,…

操作系统基础:IO管理概述【上】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; &#x1f3ae;1 I/O设备的基本概念与分类&#x1f52b;1.1 总览&#x…

计网day2

三 物理层 3.1 物理层基本概念 物理接口特性&#xff1a; 物理层解决如何连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体 3.2 编码&调制 3.3 数据交换方式 电路交换&#xff1a; 报文交换&#xff1a; 分组交换&#x…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”&#xff1a;https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的&#xff0c;用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为&#xff1a;zig-w…

【Django】Django文件上传

文件上传 1 定义&场景 定义&#xff1a;用户可以通过浏览器将图片等文件上传至网站。 场景&#xff1a; 用户上传头像。 上传流程性的文档[pdf&#xff0c;txt等] 2 上传规范-前端[html] 文件上传必须为POST提交方式 表单 <form> 中文件上传时必须带有 enctype…

决策树之scikit-learn

实例 from sklearn.datasets import load_iris from sklearn import tree import matplotlib.pyplot as plt# Load iris dataset iris load_iris() X, y iris.data, iris.target# Fit the classifier clf tree.DecisionTreeClassifier() clf clf.fit(X, y)# Plot the deci…

Java使用opencsv完成对csv批量操作

文章目录 前言一、maven二、造数三、代码部分1.OpenCsvController2.OpenCsvUtil3.StudentInfo4.CodeToValue 三、效果展示1.download2.upload 总结 前言 csv文件是不同于excel文件的另一种文件&#xff0c;常常以,作为分隔符&#xff0c;本篇将通过JavaBean的形式完成对csv文件…

作业2.12

1、选择题 1.1、以下程序的输出结果是____A____。 main() { int k11,k22,k33,x15; if(!k1) x--; else if(k2) if(k3) x4; else x3; printf(“x%d\n”,x); } A x4 B x15 C x14 D x3 1.2、有以下程序&#xff0c;while循环执行____A____次。 int main&#x…

电子邮件、SMTP、POP3 、IMAP协议

目录 1 电子邮件 1.1 电子邮件系统的组成 1.1.1 用户代理 UA (User Agent) 1.1.2 邮件服务器 (Mail Server) 1.1.3 邮件发送和读取协议 1.2 发送和接收电子邮件的重要步骤 1.3 电子邮件的组成 1.4 电子邮件地址的格式 2 简单邮件传送协议 SMTP 2.1 SMTP 通信的三个阶…

牛客周赛 Round 32 F.小红的矩阵修改【三进制状态压缩dp】

原题链接&#xff1a;https://ac.nowcoder.com/acm/contest/75174/F 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 小红拿到了一个字符矩阵&#xff0c;矩阵中仅包含&q…

顶级思维方式——认知篇三(心胸与见识)

目录 1、老《三国演义》司马懿 2、司马迁 3、 王立群&#xff1a; 使自己强大起来&#xff0c;这是打破困境的唯一途径 4、鲁迅经典寓言&#xff1a;聪明人、奴才和傻子 5、芒格 6、巴菲特 7、瑞达利欧 8、诸葛亮 1、老《三国演义》司马懿 你等年级轻轻一遇挫折&#x…

蓝桥杯题目解析 --汉诺塔(含C++栈的知识)

该题在蓝桥杯基础数据结构篇&#xff0c;进入后搜索题号1512。 汉诺塔 可以将圆盘临时置于B杆&#xff0c;也可以将A杆移除的圆盘重新移回A杆&#xff0c;但必须遵循上述两条规则。 汉诺塔了解后&#xff0c;题目也了解后&#xff0c;我们先通过试N的个数来找规律&#xff1a;…

Android 10.0 锁屏壁纸 LockscreenWallpaper

前言 一、设置壁纸 通过系统设置进行锁屏壁纸和桌面壁纸的设置。 Setting 部分的代码&#xff1a; packages/apps/WallpaperPicker2/src/com/android/wallpaper/module/DefaultWallpaperPersister.java private int setStreamToWallpaperManagerCompat(InputStream inputStre…

【实战】一、Jest 前端自动化测试框架基础入门(中) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…