内存基础知识
#何为内存
程序执行前需要放入内存中才能被cpu处理
目的是缓和cpu(快)和硬盘(慢)的速度矛盾
区分各个程序的数据在哪个地方:给内存的存储单元编址
内存从0开始,每个地址都对应一个存储单元
计算机“按字编址”,则每个存储单元大小为1字节
一字节即1B,一个比特位,即8个二进制位
字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,即16个二进制位
补充单位(就说先学机组会更好吧):
#指令工作原理
咱就是说,学下机组就知道了计算机组成原理
I trust you.
不过以我只了解,继续学下去,你需要明白
程序经过编译,链接后生成的指令是逻辑地址(相对地址)
即相对于进程起始地址而言的地址
但很明显,在实际内存中,它的物理地址(绝对地址) 一般不会和逻辑地址相同
尚若对此不管不顾,cpu执行该指令时导致其他进程的内存空间的数据被覆盖,导致程序出错
故而,引出一个重要问题
如何将指令中的逻辑地址转化为物理地址
因之,有三种装入(将指令正确装入内存)策略
1.绝对装入
2.可重定位装入(静态重定位)
3.动态运行时装入(动态定位)
#从写程序到运行程序

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