内存基础知识

一、什么是内存

在这里插入图片描述

内存就是用来存放数据的,跟硬盘一样,都是一个硬件,只不过硬盘不能直接被cpu访问,而内存可以被cpu访问,别问,问就是冯诺依曼机的设定

二、内存有什么作用

  1. 程序执行前需要先放到内存中才能被cpu处理,缓和cpu与硬盘之间的速度矛盾
  2. 在多道程序环境下,即操作系统中并发运行QQ应用程序和微信应用程序,这两个程序数据都需要放在内存中,我们需要要给内存的每个存储单元编上地址,用来区分不同程序的数据

三、进程运行的基本原理

  1. 指令的工作原理
    代码->编译->生成指令->创建进程->指令放入内存->处理机调度->按序执行指令(操作码+地址码)

  2. 逻辑地址VS物理地址
    逻辑地址是相对进程起始地址而言的地址
    物理地址是内存里的数据真实存放的地址

  3. 从写程序到程序运行

    • 编写代码
    • 编译
      由源代码文件生成目标模块
    • 链接
      由目标模块生成装入模块,链接后形成完整的逻辑地址
    • 装入
      将装入模块装入内存,装入后形成物理地址
  4. 如何实现地址转换

    • 绝对装入,编译时产生绝对地址,绝对装入方式只允许目标模块装入到内存指定位置,适用单道程序环境

    • 静态重定位装入,装入时将逻辑地址转换为物理地址,适用多道程序环境,缺点需要分配整块内存,而且内存地址需要连续

    • 动态重定位装入(dynamic runtime loading),运行时将逻辑地址转换为物理地址,需要有重定位寄存器作辅助。优点是目标模块装入内存无需任何修改,保留逻辑地址,在执行过程中结合寄存器转换成物理地址,允许程序在内存中移动

  5. 三种链接

    • 静态链接,在程序运行之前,生成好一个完整的可执行文件,包含用到的宏、用到的库函数,这个可执行文件也叫装入模块

    • 装入时动态链接,去掉装入模块概念,直接将目标模块转入内存时,再链接用到的宏、库函数,这个是解释型编程语言?

    • 运行时动态链接,在程序运行中需要执行目标模块时,才对它进行链接。优点是便于修改和更新,利于实现对目标文件的共享

四、补充

  1. 存储单元和内存地址关系
    内存比喻酒店
    内存地址就好比酒店房间
    存储单元就好比房间能睡几个人(放多少比特数据)
  2. 按字节编址
    酒店房间能睡8个人
  3. 按字编址
    不同酒店,他房间大小不一样,得具体分析
    若计算机存储字长16位,酒店房间能睡16个人
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值