内存的基础知识-第四十天

news2025/5/24 10:20:10

目录

什么是内存?内存的作用

常用的数量单位

指令的工作原理

思考

三种装入方式

绝对装入

可重定位装入(静态重定位)

动态运行时装入(动态重定位)

写程序到程序运行 

编译和链接

链接的三种方式

本节思维导图


什么是内存?内存的作用

基本概念:暂时存放CPU中的运算数据,以及与硬盘等 外部存储器 交换的数据

作用:缓和CPU与硬盘之间的速度矛盾,程序执行前需要先放到内存中才能被CPU处理

        原本数据是放在外存中进行处理的,但是外存处理速度很慢,CPU的处理速度很快,所以引入内存概念,将要处理的数据放入内存中让CPU进行快速处理

思考:多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要放到内存中,那么,如果区分各个程序的数据是放在什么位置?

答案:给内存的存储单元编写地址

        位、字节、字是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位二进制组成。而字通常为16、32或64个二进制位组成。

常用的数量单位

  • 2^10 = 1k(千)
  • 2^20 = 1M(兆,百万)
  • 2^30 = 1G(十亿,千兆)

        一台手机有4GB内存,是指该内存中可以放4*2^30个字节,如果按字节编址,就有4*2^30 = 2^32个内存单元,这些内存单元需要2^32个地址才能一一标识,所以地址需要32个二进制位来标识(0~2^32-1)

指令的工作原理

指令(操作码,与该操作相关的必要参数,与该操作相关的必要参数...) 

  1. 输入代码x=x+1.代码被编译成三条指令(机器码),每条指令都有其相应的作用
  2. 程序运行时,这些指令就会被放入内存的程序段中,等待上CPU
  3. 指令1在CPU上执行时,CPU发现操作码代表的意思是数据传送指令:将地址为01001111中存放的数据放入地址为00000011的寄存器中,然后执行指令2
  4. 指令2在CPU上执行时,CPU发现操作码代表的意思是加法指令:将地址为00000011的寄存器中存放的数据10加上1(00000001),此时该寄存器中存放的数据是11,然后执行指令3
  5. 指令3在CPU上执行时,CPU发现操作码代表的意思是数据传送指令:将地址为00000011的寄存器中存放的数据放入地址为01001111的内存单元中
  6. 至此完成x=x+1这段代码

(01001111这些码都是瞎编的,目的是为了方便理解) 

结论:我们写的代码在执行后会要翻译成CPU能识别的指令(这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量x的实际存放地址(物理地址)

思考

如果这个进程不是从地址#0开始存放的,会影响指令的正常执行吗

利用装入模块中提供的逻辑地址

起始为#0:

起始不为#0: 

那么如何将指令中的逻辑地址最终转换为物理地址?

三种装入方式

绝对装入

概念:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存

缺点:只适用于单道程序环境(不存在操作系统时期使用的方法),可以移植性低(将该代码放在另一个操作系统中时,如果绝对地址为179的位置不能使用就会出错)

可重定位装入(静态重定位)

概念:编译、链接后的装入模块的地址都是从0开始的。指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行”重定位“,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)

缺点:一个作业在装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请空间

动态运行时装入(动态重定位)

概念:编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址(这种方式主要是利用了一个重定位寄存器)

重定位寄存器:存放装入模块存放的起始地址

 如果想要从200开始,就将重定位寄存器中存放的起始地址修改为200即可

优点:

  1. 允许程序在内存中发生移动
  2. 可将程序分配到不连续的存储区中
  3. 在程序运行前只需要装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存
  4. 便于程序段的共享,可以向用户提供一个比存储空间大很多的地址空间

写程序到程序运行 

编译和链接

链接的三种方式

本节思维导图

~over~

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

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

相关文章

代码随想录27期|Pthon|Day31|贪心算法|理论基础|455.分发饼干|376. 摆动序列|53. 最大子序和

理论基础 首先,贪心算法基本靠“做题感觉”,所以没有规范的总结和做题技巧,只能说见到过之后还能想起来。 一般情况可以看成是对于一个大的问题的子问题的局部最优的求解,然后可以推导出全局的最优。 这个过程没有证明&#xf…

数据库中的几种锁

数据库锁 1.数据库锁的种类 以 mysql innoDB 为例,数据库的锁有 排他锁,共享锁,意向锁,自增锁,间隙锁,锁的范围有包括,行锁,表锁 ,区间锁。 从应用研发的视角&#xff…

Gromacs WARNING问题

上述示例中,NA 是对系统净电荷进行中和的阳离子。请根据您的系统特性和仿真需求调整这些值。 总体而言,这个警告是为了提醒您关于电荷中性化的问题,确保您的模拟结果更加物理可信。 收敛性未达到预期精度: 警告指出,优…

普中STM32-PZ6806L开发板(HAL库函数实现-访问多个温度传感器DS18B20)

简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的,其实数据手册都有说到, 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…

成为一名合格的软件测试工程师,得掌握什么技能?

在这个信息时代,软件行业的需求空前增长,而软件测试工程师作为软件开发过程中的重要角色,也越来越受企业的重视。那么,成为一名合格的软件测试工程师需要掌握什么技能呢?我结合多年的教学经验为大家总结出以下几点。 …

Fast and flexible X-ray tomography using the ASTRA toolbox

使用ASTRA工具箱进行快速灵活的X射线断层扫描 论文链接:http://dX.doi.org/10.1364/OE.24.025129 项目链接:https://astra-toolboX.com/indeX.html Abstract 从一系列投影图像中重建物体,如在计算机断层扫描(CT)中,是许多不同应…

nuxt3 env文件、全局变量处理

有两种方向 通过配置nuxt.config.ts Nuxt提供的钩子函数,实现全局变量的获取 runtimeconfig env文件往runtimeconfig放入内容 useAppConfig 通过env文件配置来获取服务端全局变量,客户端通过vite.define实现 nuxt.config.ts Nuxt钩子 1. runtim…

Unity ab包如何加密

「ab包」全称为 AssetBundle ,是Unity提供的一种资源存储压缩包。其中储存了游戏的资源,如图片、模型、纹理、音视频、代码等文件。 由于ab包具有灵活储存、支持热更、包体较小且便于管理等优势,已经成为了市面上主流的游戏资源压缩方式。 …

李沐机器学习系列4---全连接层到卷积

1 从全连接到卷积 1.1 平移不变性 从概率分布的角度来看卷积的定义, f ( τ ) f(\tau) f(τ)是概率密度, g ( t − τ ) g(t-\tau) g(t−τ)是在这个分布下的均值 ( f ∗ g ) ( t ) ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f*g)(t)\int_{-\infin}^{\infin}f(\t…

2024/01/02 每日AI必读资讯

减少LLM幻觉的方法 这篇论文总结了减少LLM幻觉的32种方法,包括RAG、微调模型,提示词工程等。 论文:https://arxiv.org/abs/2401.01313E5-mistral-7b-instruct:使用合成数据训练的Embedding模型 亮点是仅使用LLM生成的数据即可实现…

指令流水线的计算

我们需要知道以下公式: 设指令的条数为 n,指令执行需要 m 个阶段,时钟周期为 t 不采用流水线执行的时间:T1 n x m x t; 采用流水线执行的时间:T2 m x t (n - 1) x t; 加速比 S T1 / T2&…

PTA——逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。 输入格式: 每个测试是一个3位的正整数。 输出格式: 输出按位逆序…

MacOS M1/M2 Go Debug 配置

前言 换电脑,Go 环境带来一些麻烦,耽误很多时间,稍作记录。 原始电脑是 Mac 旧款,CPU x86 构型,新电脑 M2,因为旧电脑里本地文件很多,为了简化搬迁,还是用了 Mac 自带的迁移&#x…

LeetCoed刷题:21. 合并两个有序链表

题目: 是否独立解出:否 解题时的思路与想法:解题时有几个问题: 1.怎么遍历两个数组,嵌套两个while循环不能实现(后面通过看题解知道list1!null&&list2!null) …

旋转图像(LeetCode 48)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在「原地」旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示…

知虾分析——深入了解Shopee平台的知虾分析工具

Shopee是一家知名的电商平台,为了帮助卖家提高业务表现,他们提供了一款强大的数据分析工具——知虾分析。这个工具可以帮助卖家监控店铺的运营状况,优化销售策略,并提高整体的业务表现。本文将深入解析知虾分析的关键功能和用途&a…

LINUX加固之命令审计

一、前言 在LINUX安全范畴中,安全溯源也是很重要的一个环节。对主机上所有曾操作过的命令详细信息需要有一份记录保存,当系统遭受破坏或者入侵,拿出这份记录,可以帮助定位一些可疑动作。 很多系统通常都会配置安全堡垒机&#xff…

亚马逊站内广告位置在哪设置?怎么设置广告位置?-站斧浏览器

亚马逊站内广告位置在哪设置? 亚马逊提供了多种广告类型,包括: Sponsored Products(赞助产品):在搜索结果和商品详情页中展示。 Sponsored Brands(赞助品牌):在搜索结…

git提交操作(不包含初始化仓库)

1.进入到本地的git仓库 查看状态 git status 如果你之前有没有成功的提交,直接看第5步。 2.追踪文件 git add . 不要提交大于100M的文件,如果有,看第5步 3.提交评论 git commit -m "你想添加的评论" 4.push (push之前可以再…

weblogic中间件安装

1.下载jdk Java Archive Downloads - Java SE 6 下载jdk-6u45-linux-x64.bin 2.配置防火墙和SELINUX Redhat7操作系统配置防火墙,开放应用端口,例如7001; # firewall-cmd --permanent --add-port7001/tcp # firewall-cmd --reload 关闭selinu…