内存管理学习

2023-05-16

简单的内存分配算法学习

系统中一块剩余不用的大块连续内存。当需要分配内存块时,将从这个大的内存块上分割出相匹配的内存块,每个内存块都包含一个管理用的数据头,通过这个头把使用块与空闲块用双向链表的方式链接起来,如图:在这里插入图片描述
mem_head是free链表的头,整个内存块从mem_x开始,每个内存块包含一个头,内容:

1、magic

  魔术字,用于标记这个内存块是一个内存管理用的内存数据块;魔术字不仅仅用于标识这个数据块是一个内存管理用的内存数据块,实质也是一个内存保护字:如果这个区域被改写,那么也就意味着这块内存块被非法改写(正常情况下只有内存管理器才会去碰这块内存)
  魔术字高位包括当前块是否被使用标志:used,若置位则当前块已被使用,否则是空闲块。

2、heap信息

  当前堆使用信息:堆起始地址、堆的大小、堆使用大小、堆剩余大小、空闲链表头等。

3、next块

4、pre块

  3和4是双向链表,链接所有的块。

5、next未使用块

6、pre未使用块

  5和6也是双向链表,链接空闲链表。
 
  头后面才是真正的内容,头信息把所有块和空闲块用双向链表链接起来,所有块是一个双向链表,空闲块也是一个双向链表,各自独立维护。

在这里插入图片描述

  系统申请内存块时,会先从free-head指向的空闲块中查找,直到查找到满足要求,则会从此内存块中分配,若此内存块较大,则会分割出新的内存块,创建新的链表;每次分配内存块时都会留出头信息用于存放链表及堆等信息,返回的实际是头后面的内存地址。块申请后,则会将此块置位used。
  系统释放内存时,会判断当前释放的块的上下块是否是空闲块,若上一个使用块是空闲块,则与上一个块合成一个块, 修改使用块链表,修改堆信息;若下一个块是空闲块,则与下一个块合成一个块,修改使用块链表,同时修改空闲块链表,修改堆信息
释放后,将此块used位清除。

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

内存管理学习 的相关文章

随机推荐

  • 不同的docker主机,网线直连,ros分布式通讯设置

    1 参考跨宿主机 如何实现 Docker 容器的通讯 xff1f xff08 Docker Swarm xff09 大鹏的世界的博客 CSDN博客 docker swarm 跨主机容器通信 感谢大佬 2 两台主机能够相互ping 通 3 在
  • ros 已经发布topic 但是却echo不出来

    因为是用的docker镜像 xff0c 采用多机通信的方式 xff0c 一台电脑跑仿真 xff0c 一台电脑跑算法 当进入docker的时候 xff0c docker进入了一个莫名其妙的host也就是root 64 jszn arm pla
  • 英文词组

    bonehead 笨蛋 buddy 密友 blow over 经历 i give up you won off duty 下班 20080506 每天一起练口语 健康话题 Health I 39 m going to the hospita
  • openrave 生成ikfast 第一步遇到的问题

    1 rosrun collada urdf urdf to collada jszn robot description with sensor gazebo xacro jszn robot description with sensor
  • 单视图测量 (2D变换、影消点线、单视图重构)

    写在前面 xff1a 本篇Blog仅作为学习笔记 xff0c 学习内容来自于北邮CV XUEBA团队的三维重建 精简版 xff0c 鲁鹏 课程 回顾经典2D变换 等距变换 旋转矩阵 Rotate Matrix 的性质分析 证明 xff1a
  • libpng warning: iCCP: known incorrect sRGB profile 报错

    libpng warning iCCP known incorrect sRGB profile 警告 xff0c 问题解决 目录 libpng warning iCCP known incorrect sRGB profile 警告 xf
  • 卷积神经网络核心概念再复习+Pytorch一维卷积的实现

    蓝色 紫色 红色 深度学习之卷积神经网络 基本的图像分类模型架构 卷积层 xff1a 用来提取图像的底层特征 池化层 xff1a 防止过拟合 xff0c 减小数据维度 全连接层 xff1a 汇总卷积层和池化层得到的底层特征和信息 xff0c
  • Ubuntu20.04安装过程 【磁盘分区】

    前言 首先 要了解你的电脑配置 xff08 我实验室的如下 xff09 xff1a 整个安装Ubuntu系统的过程大致如下 xff1a 华硕主板按F2 F8 xff0c 这个可以百度 也可以重新启动 xff0c 在你的第一个界面上能看到 按
  • KLT光流跟踪特征点对

    前言 本篇所述为KLT光流跟踪两个视频中匹配特征点对的具体实现 61 gt 源码见Github openCV版本 xff1a 4 5 5 函数详解 1 特征提取 1 SIFT特征提取调用方式 sift span class token op
  • Ubuntu 20.04桌面文件夹图标消失及文件系统无法打开

    前言 之前遇到过服务器上桌面图标突然消失的情况 在更换系统语言之后 xff0c 桌面出现过一次这种情况 xff0c 经过重启之后就恢复了 再后来又莫名其妙出现了这么个问题 xff0c 最开始搜索的解决方案是 让你打开任务管理器 gnome
  • 【论文笔记】Deblur-NeRF == HKU ==CVPR‘2022

    蓝色 紫色 红色 Deblur NeRF Neural Radiance Fields from Blurry Images Author From Abstract 神经辐射场 xff08 NeRF xff09 由于其显著的合成质量 xf
  • Linux安装 metashape

    1 下载软件 3D三维建模软件 Agisoft Metashape Pro 2 安装 span class token comment 进入root模式 xff0c 如果之前没有设置过密码 span span class token fun
  • Information Collection

    港澳新地区 香港理工大学 杨波 助理教授 vLAR实验室 欧洲 ETH Z rich Marc Pollefeys Computer Vision and Geometry Group TU Delft 3D geoinformation
  • 804半导体物理 中科院半导体所考研经验

    本人2021考研 xff0c 半导体研究所 xff0c 物理电子学 xff0c 数一英语一 xff0c 专业课804半导体 自己之前在备考的时候就感觉专业课的资料和备考经验比较少 xff0c 现在就写一些自己总结的经验 xff0c 放一些资
  • 一些cmake error fixed

    建完虚拟环境后 运行 pip install 出现报错 xff0c 显示svox2安装出错 xff0c 然后开始进入到svox2中进行手动编译和安装 1 cmake svox2 csrc pybind11找不到 conda span cla
  • metashape-pro python scripts render specified viewpoint

    官方python脚本使用文档 主函数 xff1a render 61 chunk model renderImage 1 实现特定视角的渲染需要通过脚本方式进行 xff0c 原本的metashape pro中是没有这个功能的 首先在meta
  • 【mega-nerf】调包失败&pip install失败解决方案

    Problem 1 调包失败 在这样的层级架构里调包 xff0c 输出无法找到 mega nerf 直接用 sys path append 没有作用 span class token comment import sys span span
  • 使用 rust 开发 stm32:前言

    更多分享内容可访问我的个人博客 https www niuiic top 本系列教程全部置于stm32专栏 本文为使用 rust 开发 stm32 系列教程前言 Why Rust Rust 特性就不用多介绍了 xff0c 有个编译器管着有时
  • docker与virtualbox切换使用

    管理员模式打开cmd 查看hyper v状态 xff1a bcdedit span class token operator span findstr hyperv 若状态显示 hypervisorlaunchtype Auto 则当前可支
  • 内存管理学习

    简单的内存分配算法学习 系统中一块剩余不用的大块连续内存 当需要分配内存块时 xff0c 将从这个大的内存块上分割出相匹配的内存块 xff0c 每个内存块都包含一个管理用的数据头 xff0c 通过这个头把使用块与空闲块用双向链表的方式链接起