内存基础知识

#何为内存

  • 程序执行前需要放入内存中才能被cpu处理
  • 目的是缓和cpu(快)和硬盘(慢)的速度矛盾
  • 区分各个程序的数据在哪个地方:给内存的存储单元编址
  • 内存从0开始,每个地址都对应一个存储单元
  • 计算机“按字编址”,则每个存储单元大小为1字节
  • 一字节即1B,一个比特位,即8个二进制位
  • 字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,即16个二进制位
  • Screenshot 2026-07-09 101334.png
  • 补充单位(就说先学机组会更好吧):
  • Pasted image 20260709101649.png
  • #指令工作原理

  • 咱就是说,学下机组就知道了计算机组成原理
  • I trust you.
  • 不过以我只了解,继续学下去,你需要明白
  • 程序经过编译,链接后生成的指令是逻辑地址(相对地址)
  • 即相对于进程起始地址而言的地址
  • Pasted image 20260709103344.png
  • 但很明显,在实际内存中,它的物理地址(绝对地址) 一般不会和逻辑地址相同
  • 尚若对此不管不顾,cpu执行该指令时导致其他进程的内存空间的数据被覆盖,导致程序出错
  • 故而,引出一个重要问题
  • 如何将指令中的逻辑地址转化为物理地址
  • 因之,有三种装入(将指令正确装入内存)策略
  • 1.绝对装入
  • 2.可重定位装入(静态重定位)
  • 3.动态运行时装入(动态定位)
  • #从写程序到运行程序


    Pasted image 20260709110643.png

  • 这图确实能解释我的某些奇妙问题,
  • *编译*:由编译程序将源代码编译成若干个目标模块,即将高级语言翻译为机器语言
  • *链接*:由链接程序将编译后形成的一组模块,以及所需库函数链接在一起,形成一个完整的装入模块
  • 链接的三种方式
  • *装入*:即前文提到的装入方式,由装入程序将装入模块装入内存运行