版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
1 内存概念
1.1 内存作用
内存可存放数据。程序执行前需要先放到内存中才能被CPU处理一一缓和CPU与硬盘之间的速度矛盾
思考:在多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中。那么,如何区分各个程序的数据是放在什么地方的呢?
方案:给内存的存储单元编地址
内存地址相当于酒店旅馆中的小房间,酒店管理者为了便于管理每个房间,采取给每个房间编号
内存中也有一个一个的“小房间”,每个小房间就是一 个“存储单元”
如果计算机“按字节编址”, 则每个存储单元大小为1字节,即1B,即8个二进制位
如果字长为16位的计算机 “按字编址”,则每个存储单元大小为1个字;每个字的大小为16个二进制位
存储单元大小由计算机按字编址还是按字节编址来确定
一台手机/电脑有4GB内存,是指该内存中可以存放4X230个字节。
如果是按字节编址的 话,也就是有4X230=232个“小房间”
这么多“小房间”,需要232个地址才能一一标识,所以地址需要用32个二进制位来表示(0~232-1)
210=1K (千)
220=1M (兆,百万)
230=1G (十亿,千兆)
可以通过内存的大小,让我们确定地址长度应该是多少(即要多少个二进制位才能表示相应数目的存储单元)
1.2 逻辑地址VS物理地址
实际生活中的例子:
宿舍四个人一起出去旅行,四个人的学号尾号分别是0、1、2、3。
住酒店时酒店给你们安排了4个房号相连的房间。四个人按学号递增次序入住房间。比如0、1、2、3号同学分别入住了5、6、7、8号房间。
四个人的编号0、1、2、3其实是一个“相对位置”,而各自入住的房间号是一个“绝对位置”。
只要知道0号同学住的是房号为N的房间,那么M号同学的房号一定是N+M。
指令中的地址也可以采用这种思想。编译时产生的指令只关心“相对地址”,实际放入内存中时再想办法根据起始位置得到“绝对地址”。
相对地址又称逻辑地址,绝对地址又称物理地址。
从写程序到程序运行:
编译:由编译程序将用户源代码编译成若干