第七章 动态内存管理
来源:互联网 发布:wp 添加js 编辑:程序博客网 时间:2024/06/08 02:21
第七章 动态内存管理
7.1 内存控制块
μC/OS-Ⅱ对内存进行两级管理,即把一个连续的内存空间分为若干各分区,每个分区分为若干个大小相等的内存块。操作系统以分区为单位来管理动态内存,而任务以内存块为单位来获取和释放动态内存。
7.1.1 可动态分配内存划分
1. 内存块
μC/OS-Ⅱ以内存块为单位向应用程序提供动态内存。内存块的大小由用户定制。
2. 内存分区
大小相等的多个内存块可以组成一个内存分区。内存分区是系统对内存进行管理的基本单位。
3. 内存分区与内存块的定义
INT16U IntMemBuf[10][10]; 有10个内存块,每个内存块长度为10的内存分区。
7.1.2 内存控制块OS_MEM的结构
内存控制块(OS_MEM):记录和跟踪每一个内存分区的状态。
7.1.3 空内存控制块链表
在μC/OS-Ⅱ初始化时,会调用内存控制块的初始化函数OS_MemInit()定义并初始化一个空内存控制块链表。
7.2 动态内存的管理
7.2.1 创建动态内存分区OSMemCreate()
OS_MEM * OSMemCreate(void *addr,INT32U nblks, INT32U blksize, INT8U *err);
注:分区的内存块至少有两块;每个内存块的空间至少能存放一个指针。
7.2.2 请求获得一个内存块OSMemGet()
void * OSMemGet(OS_MEM *pmem,INT8U *err);
在调用函数OSMemGet()时,应该事先知道该分区中内存块的大小,并且在使用时不能超过该内存长度。
7.2.3 释放一个内存块OSMemPut()
INT8U OSMemPut(OS_MEM *pmem, void*pblk);
在调用OSMemPut()函数的一个内存块时,一定要确保把该内存块释放到它原来所属的内存分区中。
7.2.4 查询一个内存分区的状态OSMemQuery()
INT8UOSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);
- 第七章 动态内存管理
- 第七章 内存管理
- 《第七章》 数据管理 --之 动态内存分配
- [Linux] 第七章 数据管理 - 动态内存分配
- Linux程序设计第七章 内存管理 笔记
- 第七篇 再述oracle数据库体系结构 之三:内存结构与动态内存管理
- 第七篇 再述oracle数据库体系结构 之三:内存结构与动态内存管理
- 第七章 内存管理单元MMU
- 第七章 高质量C编程规范内存管理
- linux程序设计——内存管理(第七章)
- 动态内存管理
- 动态内存管理实例
- C++ 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- OK-HTTP封装(okhttp版本号:3.4.1)
- hdu 5874 Friends and Enemies -ICPC网络赛大连-二分图
- JAVA中获取项目文件路径
- Android之SimpleAdapter简单实例和SimpleAdapter参数说明
- OpenGL顶点缓冲区一步步分析
- 第七章 动态内存管理
- SH整合异常:SessionFactoryImplementor.getProperties()Ljava/util/Map
- 自定义对象中文排序,可以指定排序的字段名,较为通用
- 深度网络之梯度下降算法
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之十:Spring mvc & hibernate 事务处理(回滚)
- ios总结
- 设计模式之-单例模式
- the java syncrhonisers
- MyBatis学习总结(一)——MyBatis快速入门