内存管理方案

2023-11-18

内存管理方案
Memory Management System

Author: Owen

目 录
内存管理方案 1
目 录 1
1 概述 2
2 理论依据 2
2.1 不对内存进行管理 2
2.2 对内存进行内部管理: 2
3 实现方案 2
3.1 增加类名属性,用于管理登记 2
3.2 增加自创建,自销毁函数,统一管理 3
3.3 MMS管理单例 3
3.4 MMS临界变量 3
3.5 MMS接口概述 3
3.6 模式优化 6
3.7 引用相关实例 6
3.8 其他建议 7

1 概述
内存优化的方案主要是为了减少应用程序对系统内存的频繁申请释放,减少应用程序运行中的内存管理负担。可以提高系统整体的性能,而非单独应用程序。
2 理论依据
2.1 不对内存进行管理
优势: 开发人员不需要管理内存,使用可以根据需要,无需过多操作。
弊端: 内存的申请释放,对系统而言,需要做一系列的操作,比如:内存页表的修改,内存碎片重组等。如果频繁申请释放同类资源,会造成系统资源的浪费。
2.2 对内存进行内部管理:
优势: 为了减少内存的申请释放,应用程序可以记忆每次需要释放的内存块,并且再下次使用时可以直接使用,使得内存使用稳定在一定的范围内,减少系统资源的重复消耗。
弊端: 减少系统申请释放内存的开销,也增加了少量的逻辑运算,管理方案的维护。
需要对需要管理的类,做少量修改。比如 增加类名属性

3 实现方案
方案概述:
[概括为: 工厂模式] 应用程序使用内存管理单例,托管的类需要先注册名称和创建函数,需要申请某个类型的内存时,直接在对应的空闲链表中获取一个[获取函数会在返回前,清空内存块],如果不存在,则申请一个新的。在释放某个类型的内存时,将该内存指针插入空闲链表即可。
3.1 增加类名属性,用于管理登记
“仿MFC机制:

DEFINE _IMPLEMENT_RUNTIMECLASS(CLASS_NAME, BASE_CLASS_NAME,WSCHEMA,PFNNEW) \

STATIC CHAR _LPSZ##CLASS_NAME[] = #CLASS_NAME; \
CRUNTIMECLASS CLASS_NAME::CLASS##CLASS_NAME = { \
_LPSZ##CLASS_NAME, SIZEOF(CLASS_NAME), WSCHEMA, PFNNEW, \
RUNTIME_CLASS(BASE_CLASS_NAME), NULL }; \
STATIC AFX_CLASSINIT INIT##CLASS_NAME(&CLASS_NAME::CLASS##CLASS_NAME); \
CRUNTIMECLASS* CLASS_NAME::GETRUNTIMECLASS() CONST \
{ RETURN &CLASS_NAME::CLASS##CLASS_NAME; } \”
3.2 增加自创建,自销毁函数,统一管理
此处可以考虑智能指针, 或从根类继承
Create();
{
Return new ClassA();
}
Destroy();
{
Delete this;
}
3.3 MMS管理单例

使用单例模式,建立内存管理系统[简称MMS]
3.4 MMS临界变量
支持多线程处理。
MMS配置一个临界变量,用于确保链表头数据安全
每个链表头配置一个临界变量,用于确保链表数据安全
3.5 MMS接口概述
3.5.1 托管类注册
CMMS *pMMS=CMMS::GetInstance();
pMMS->Register(ClassA.classname,&ClassA.Create);
void Register(…)
{
AutoLock(&m_lock);
m_mapClassCreator[ClassA.classname]= &ClassA.Create;
}
3.5.2 托管类对象获取
ClassA *pA= pMMS->AllocateClassMemory(ClassA.classname);
Typedef list

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存管理方案 的相关文章

  • 编译原理(4)LR(0)语法分析程序设计(Python实现)

    1 实验要求 1 已知文法G S 0 S E 1 E aA 2 E bB 3 A cA 4 A d 5 B cB 6 B d 手工建立文法G S 的LR 0 的项目集规范族DFA和LR 0 分析表 2 根据清华大学版 编译原理 第3版 教材
  • Jfugue编程概要

    转自 http www sudu cn info html edu java 20060912 304274 html JFugue是个用于音乐作曲的Java API 和其他的音乐API不同 他能够让你用数据字符串来指定音符 乐器 和弦 及

随机推荐

  • java sql 查询中的转义序列不对_在 JDBC 中使用 SQL 转义序列 - SQL Server

    使用 SQL 转义序列Using SQL escape sequences 08 12 2019 本文内容 按照 JDBC API 的定义 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC
  • 20天零基础自学Python

    大家好 我是宁一 Python 数字数据类型是用来存储数值的 是我们从小学就开始接触的老朋友了 也是python中最基础的数据类型 1 Number 数据类型 python3的 Number 数据类型包括 int 整数 float 浮点数
  • B站化播放量为播放时长,是谁的狂欢?

    6月26日晚 B站举办了14周年庆典晚会 在晚会上 除了周深 美依礼芽同框献唱受到关注 B站董事长兼CEO陈睿的演讲内容同样值得深思 一来 陈睿提到 要将目前B站视频前台显示的播放量数据从次数改为分钟数 计划未来几周 将完成产品更新 二来
  • 堆栈内存和闭包

    思维导图 堆栈内存小科普 1 js中的内存分为 堆内存和栈内存 堆内存 只要用来存储引用数据类型的值 对象存的是键值对 函数存的是字符串 栈内存 供js运行的环境 函数执行 存基本数据类型的值 堆栈内存的释放问题 我们每次给变量存值或者执行
  • 程序员秋招最全Java面试题及答案整理(2023最新版)

    前言 大家好 最近一个月 花了不少时间 给大家整理了一套 2023 的技术面试资料 包括各大厂最新面试题以及面经解析涉及JVM Mysql 并发 Spring Mybatis Redis RocketMQ Kafka Zookeeper N
  • 【C刷题】day1

    一 选择题 1 正确的输出结果是 int x 5 y 7 void swap int z z x x y y z int main int x 3 y 8 swap printf d d n x y return 0 答案 3 8 解析 考
  • 怎样将excel文件导入mysql中

    1 整理好excel表中的字段 2 在Navicat中创建表 如果导入的是一个追加的表 则无需创建新表 CREATE TABLE orderinfo orderid VARCHAR 10 NULL 订单 id 主键 userid INT 1
  • 华为OD机试2023年最新题库(JAVA、Python、C++)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 5 11月份考的都是OD统一考试 B卷 2023年5月份题库已经更新为OD统一考试 B卷 题库由三部分组成 1 202
  • 【H5】 svg内text、image、path标签的使用

    H5 svg内text image path标签的使用 text标签 div style width 500px height 500px border 2px solid pink margin 50px auto 0 div
  • XML中约束文档的引用和书写

    在XML中定义了一套规则 来对文档内容进行约束 这叫做XML约束 常用的俩种约束语言 DTD约束 Schema约束 XML文档中可以引入多个约束文档 为了防止出现不同含义的同名名称冲突 所以 所以可以XML提供了名称空间 1 DTD语法 D
  • 【HTML】列表标签、表格标签、块级标签、表单标签

    文章目录 一 列表标签 1 无序列表 2 无序列表 3 定义列表 项目列表 二 表格标签 1 表格整体架构 2 表格的标签介绍 3 table标签的属性 4 tr标签的属性 5 th td标签的属性 6 跨行 跨列的表格 三 块级标签 1
  • vue猜数字游戏

    div p msg p div
  • node.js JSON对象和string的相互转化

    JSON stringify obj 将JSON转为字符串 var json aa sdddssd bb 892394829342394792399 23894723984729374932874 cc 11111111111111 gt
  • html5期末知识点归纳总结,web期末考试知识点

    题型及知识点 一 知识点 上课内容全覆盖 除补充的html5和css3的内容 常用的html标记及属性 弄清楚哪些是块元素 哪些是行内元素 特殊字符标记 p40 Css属性 i 字体 font size font family font w
  • 蓝桥杯JAVA B组 2020(1)第五题 排序

    一 题目描述 小蓝最近学习了一些排序算法 其中冒泡排序让他印象深刻 在冒泡排序中 每次只能交换相邻的两个元素 小蓝发现 如果对一个字符串中的字符排序 只允许交换相邻的两个字符 则在所有可能的排序方案中 冒泡排序的总交换次数是最少的 例如 对
  • SQLCipher核心思想

    加密原理 page data iv hmac iv是一段随机数 可以保证每一页的iv值都不一样 和page data一起作用 用于生成hmac值 sizeof page data p
  • kubeasz 二进制安装k8s高可用集群

    一 kubeasz介绍 项目致力于提供快速部署高可用k8s集群的工具 同时也努力成为k8s实践 使用的参考书 基于二进制方式部署和利用ansible playbook实现自动化 既提供一键安装脚本 也可以根据安装指南分步执行安装各个组件 二
  • Maven2部署构件到Nexus时出现的Failed to transfer file错误

    原文出处 http www javatang com archives 2010 01 23 4518375 html 作者 Jet Mah from Java堂 声明 可以非商业性任意转载 转载时请务必以超链接形式标明文章原始出处 作者信
  • jni基础

    JNI相关 静态注册 java代码需要和C 代码相符通讯就需要通过JNI来进行注册 java public native String stringFromJNI 代表该函数的实现在so so Java com first firstndk
  • 内存管理方案

    内存管理方案 Memory Management System Author Owen 目 录 内存管理方案 1 目 录 1 1 概述 2 2 理论依据 2 2 1 不对内存进行管理 2 2 2 对内存进行内部管理 2 3 实现方案 2 3