ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

存储器管理——内存基础知识

2022-05-14 02:31:07  阅读:184  来源: 互联网

标签:装入 存储器 基础知识 编译 地址 内存 模块 链接



内存是用于存放数据的硬件。
程序执行前需要先放到内存中才能被CPU处理。

2的10次方=1K(千)
2的20次方=1M(兆,百万)
2的30次方=1G(十亿,千兆)
一台手机/电脑有4GB内存,是指该内存中可以存放4乘2的30次方个字节。也就是2的32次方个地址,所以地址需要用32个二进制位来表示

实际生成机器指令时并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是逻辑地址(相对地址)

只要知道逻辑地址(相对地址)和起始地址,就可以知道物理地址(绝对地址)

从写程序到程序运行的步骤:编辑→编译→链接→装入

编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载):由装入程序将装入模块装入内存运行

装入的三种方式:绝对装入、静态重定位、动态重定位
1.绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。绝对装入只适用于单道程序环境。程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。

2.静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

3.动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
特点:1.允许程序在内存中发生移动。并且可将程序分配到不连续的存储区中2.在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存3.便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。

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

链接的三种方式:
1.静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2.装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
3.运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对
目标模块的共享。
















标签:装入,存储器,基础知识,编译,地址,内存,模块,链接
来源: https://www.cnblogs.com/LXZYZDCZL/p/16268979.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有