Linux内存的概念及管理

news2024/11/26 17:27:10

1、内存概念

        内存是指计算机中所安装的随机存取内存的容量,储存是指计算机内硬盘的容量。硬盘应当是计算机的“外存”。内存应当是在主板上的一些存储器,用来保存CPU运算使用过程中的中间数据和计算结果,当不用这些数据时,它们被保存在硬盘上。

1.1 什么是内存?

宏观上看内存是硬件设备,用于存放数据的设备,里面由各种集成电路组成。

        但是要和硬盘区分开来,内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。若要使用硬盘上的信息,则需要插入内存。CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号来指挥硬盘工作,硬盘上的信息只有被装入内存后才能被处理。

在用途上讲:程序的运行要依靠内存,只有将程序放在内存上,才能被CPU处理,因此内存主要有以下作用:

  • 内存存放CPU中的运算数据:CPU会把需要运算的数据调到内存中进行运算,运算完后CPU将结果再传出来。
  • 内存存放硬盘等外部存储设备交换的数据。

1.2 内存的体现(硬件组成)

内存是由集成电路组成,从底层的二极管到内存的电路结构。

那么从内存往下(硬件)看可以粗糙理解成:内存->组合逻辑单元和存储单元->逻辑门->二极管->电路。

1 内存地址是怎么来的?

        内存最小单位是一些类似于二极管这样的东西,它能存储一个电状态,高或低,可表示1或0。这些单元经过组织起来保存数据,组织的方法是8个编成一个字节,4个字节一个字,每组数据都可以读写。那么这些单元按照顺序排放后用地址编号,按照地址可访问其中的任一个字、字节。

2 怎么访问这些内存地址?

电路访问时由两组数据连线:地址线和数据线,比如都是32位的,地址线描述要访问的具体单元,数据线存放要给这个单元赋值的数据(写访问)或读出的数据(读访问)。这些单元上电时才能保持状态,所以内存一掉电(关机),其中的数据就丢失了。

3 逻辑单元可以分为两类:

  1. 组合逻辑单元:不可存储信息。比如译码器
  2. 存储单元:可存储信息。比如寄存器

1.3 内存的种类

上面介绍到内存实际上是由各种组合逻辑单元和存储单元构成,其组成的主要分为三类:RAM、ROM、Cache(我们经常听说的)

RAM:随机存储器(主存)

既可以从中读取数据,也可以写入数据。当机器掉电时,数据就会丢失。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)

存储的数据用于中央处理器(CPU)处理当前指令、存储计算机临时使用的数据。RAM 是一个临时存储区,用于保存数据供计算机快速访问。 RAM 保存当前由 CPU 执行的程序和数据。

ROM:只读存储器

ROM中的数据只能读出,一般不能写入,数据掉电也不会丢失,ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。ROM所存数据,一般是事先写好的。用于引导计算机。

Cache:高速缓冲存储器

缓存是一个临时存储区域,用于保存经常使用的数据以便更快地访问。 缓存保存着 CPU 经常使用的数据和程序。

 1.4 访问内存流程

访问内存流程可以通俗理解:

CPU发布指令后可以通过寄存器或者自身去访问内存,首先访问Cache高速缓冲存储器查找数据,里面放着CPU经常用的数据和程序。如果没有找到相关数据,则访问RAM随机存储器,里面存放着计算机临时使用的数据,最后再返回CPU。

2、内存管理

2.1 malloc与free

与内存相关的最常用的是malloc申请内存空间函数与free释放内存空间函数,那么对于内存而言,这两个函数是如何具体执行的呢?先简单介绍一下这两个函数:

malloc

malloc 分配指定大小的内存空间,返回一个指向该空间的指针。大小以字节为单位。返回 void* 指针,需要强制类型转换后才能引用其中的值。

int* ptr; 
ptr = (int*)malloc(sizeof(int)); /* 进行强制类型转换 */ 
free(ptr);

free

free 释放一个由 malloc 所分配的内存空间。ptr 指向一个要释放内存的内存块,该指针应当是之前调用的 malloc 的返回值。

2.2 malloc与free具体执行

malloc是动态分配内存,动态分配的内存是在堆中,堆从低地址向高地址增长:

malloc 使用空闲链表组织堆中的空闲区块。每个空闲区块都有一个相同的首部,称为“内存控制块”(类似于进程管理块),记录了空闲区块的信息,比如指向下一个分配块的指针、当前分配块的长度、或者当前区块是否已经被分配出去。这个首部对于程序是不可见的,malloc 返回的是紧跟在首部后面的地址,即可用空间的起始地址

malloc 分配时会搜索空闲链表,根据匹配原则,找到一个大于等于所需空间的空闲区块,然后将其分配出去,返回这部分空间的指针。注意,返回的指针是从可用空间开始的,而不是从首部开始

 free 会将区块重新插入到空闲链表中。free 只接受一个指针,却可以释放恰当大小的内存,这是因为在分配的区域的首部保存了该区域的大小。

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

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

相关文章

鸿蒙仓颉语言【Redis仓颉语言客户端】

特性 支持RESP2和RESP3协议接口设计兼容jedis接口语义丰富的管理命令支持支持单连接多线程模式支持发布订阅模式支持哨兵模式和集群模式完备的单元测试覆盖架构简洁,易于扩展 开发计划 2024.3.22 完成支持单机模式的RESP2和RESP3协议的客户端,提供Bet…

实际生活中网段不通的典型分析及处理方案

关于端口: 应用层: FTP TELNET SMTP DNS TFTP SNMP 端口号: 21 23 25 53 69 161 传输层: TCP UDP(DNS两个都占…

7月21日,贪心练习

大家好呀,今天带来一些贪心算法的应用解题、 一,柠檬水找零 . - 力扣(LeetCode) 解析: 本题的贪心体现在对于20美元的处理上,我们总是优先把功能较少的10元作为找零,这样可以让5元用处更大 …

野兔在线工具箱系统全新升级改版,基于TP8和yetuadmin后台实现

野兔在线工具箱系统全新升级改版,基于TP8和yetuadmin后台实现 系统名称:野兔在线工具系统 系统语言:支持多语言,大概有20种 系统源码:不加密,开源 系统开发:PHPMySQL (基于thinkphp8&#x…

重发布路由策略实验

实验要求 1.搭建拓扑 路由策略分析: 拓扑左边是rip协议,右边是ospf协议,想要实现全网可达可以采用多点双向重发布的方式。 对于rip协议使用偏移列表来干涉选路,对于ospf协议采用路由策略来干涉选路 2.配置ip r1 [AR1]interfac…

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

什么是机器学习以及机器学习如今的社会现状!!

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

长效代理IP如何选用及代理服务分析

在这个数据为王、信息瞬息万变的时代,长效代理IP成为了众多开发者、数据科学家乃至普通网民手中的一把利器。它不仅能帮助我们解决地域管理,还能在保护隐私的同时,确保数据传输的稳定与安全。但面对市面上琳琅满目的代理服务,如何…

飞腾腾云S2500 Nginx单机环回测试性能调优方法

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

Vulnhub靶场DC-7练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-…

深度学习每周学习总结N4:中文文本分类-Pytorch实现(基本分类(熟悉流程)、textCNN分类(通用模型)、Bert分类(模型进阶))

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结:1. 基础模型a. 数据加载b. 数据预处理c. 模型搭建与初始化d. 训练函数e. 评估函数f.拆分数据集运行模型g. 结果可…

git命令学习分享

分布式版本控制系统,本地仓库和远程仓库相互独立。 使用repository仓库进行控制,可以对里面的文件进行跟踪,复原。 git config --global --list:查看git配置列表 cd ** :进入** cd .. :退回上一级 echo…

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

​​​​​​​ 目录 一、引言 二、零样本音频分类(zero-shot-audio-classification) 2.1 概述 2.2 意义 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数​​​​​​​ 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模…

TinyVue:与 Vue 交往八年的组件库

本文由体验技术团队莫春辉老师原创~ 去年因故停办的 VueConf,今年如约在深圳举行。作为东道主 & 上届 VueConf 讲师的我,没有理由不来凑个热闹。大会结束后,我见裕波在朋友圈转发 Jinjiang 的文章《我和 Vue.js 的十年》,我就…

版本控制工具

版本控制工具是用于记录代码文件变化历史、方便查阅特定版本修改情况的系统,一般分为集中式和分布式两种。以下是一些常见的版本控制工具: 集中式版本控制工具 Subversion(SVN) 简介:Subversion是一种集中式版本控制…

【LeetCode】day15:110 - 平衡二叉树, 257 - 二叉树的所有路径, 404 - 左叶子之和, 222 - 完全二叉树的节点个数

LeetCode 代码随想录跟练 Day15 110.平衡二叉树257.二叉树的所有路径404.左叶子之和222.完全二叉树的节点个数 110.平衡二叉树 题目描述: 给定一个二叉树,判断它是否是 平衡二叉树 平衡二叉树的定义是,对于树中的每个节点,其左右…

文件包含漏洞: 函数,实例[pikachu_file_inclusion_local]

文件包含 文件包含是一种较为常见技术,允许程序员在不同的脚本或程序中重用代码或调用文件 主要作用和用途: 代码重用:通过将通用函数或代码段放入单独的文件中,可以在多个脚本中包含这些文件,避免重复编写相同代码。…

昇思25天学习打卡营第27天 | Diffusion扩散模型

学习心得:探索Diffusion扩散模型 在我最近对生成模型的学习中,尤其是Diffusion模型,我发现这是一种极具潜力的技术,特别是在图像生成领域。Diffusion模型的核心概念是通过一个逐步的去噪过程,将纯噪声数据转换成有意义…

算法——双指针(day4)

15.三数之和 15. 三数之和 - 力扣(LeetCode) 题目解析: 这道题目说是三数之和,其实这和我们之前做过的两数之和是一个规律的~无非就是我们需要实时改动target的值。先排好序,然后固定一个数取其负值作target&#xf…

单链表<数据结构 C版>

目录 概念 链表的单个结点 链表的打印操作 新结点的申请 尾部插入 头部插入 尾部删除 头部删除 查找 在指定位置之前插入数据 在任意位置之后插入数据 测试运行一下: 删除pos结点 删除pos之后结点 销毁链表 概念 单链表是一种在物理存储结构上非连续、非顺序…