第二章《信息的表示和处理》(一)

虚拟内存是什么

虚拟内存是一个抽象的非常大的字节数组。主要包含两个重要的作用(参考这里)

  • 扩展内存大小限制:放了防止内存被程序耗尽,虚拟内存会通过各种机制来扩展实际内存的大小,例如使用磁盘空间

  • 简化寻址过程:参考文章中有个非常好的例子,见下方

    学校里有N个学生,每个同学都有自己的名字(物理地址),但是当他们被分配到各个班里座位上的时候,老师并不需要知道他们的名字就可以用座位的几排几列(虚拟地址)来指代学生*

十六进制有什么作用

二进制用于表示较大值的数字时,非常冗长。例如,表示一个字节,也就是8位信息时,二进制的值域为[00000000,11111111],映射为现实中常用的十进制,也就是[0,255]而已,我们需要用一种更为简单的方法来表示信息

那么为什么不考虑使用十进制呢?

因为,计算机中信息的最小载体是,位的本质也就是0或1(可以理解为‘是’或‘否’的含义)。用十进制来表示信息很难转换为计算机中用来表示信息的模式。

而比较方便的形式是八进制十六进制(8=23,16=24),它们都能以较短长度的值来描述一定的信息,并且能够很轻易的将信息转换为计算机中的位模式

在这两者之间,表示同样的信息,十六进制的值长度是肯定小于八进制的值长度的

注:十六进制的数字都是以0x开头作为标识的

字’大小的重要性

在第一章中,我们了解到了什么是’字‘(计算机总线总是传递定长的的字节块,这个字节块的容量被称为1字

常见的'字'有4字节和8字节的,也就是耳熟能详的32位64位

字长决定的最重要的系统参数就是虚拟空间的最大大小

为什么字长能够决定虚拟空间的大小?原因如下:

虚拟内存的每一个字节都由一个唯一的数字来标识,称为它的地址地址是用一个字来编码的

对于32位系统而言,地址的取值区间只有[0,(2^32)-1],那么我们就可以计算出虚拟地址空间的最大大小为2^32字节 = 4GB

注意:我们称呼程序为32位程序64位程序时,指的是程序编译时是32位的还是64位的,而不是由其运行时的机器类型决定的

寻址与字节顺序

对于跨越多字节的程序对象,我们必须确定两个存储规则:

  1. 这个对象的地址有是什么
  2. 在内存中如何排列这些字节

在几乎所有的机器上,跨越多字节的程序对象都是以连续的内存空间进行存储的

例如:一个int类型(32位)的变量x的地址值为0x100,那么x变量被存储在0x100、0x101、0x102和0x103这4个位置中

那么这么一个4字节的int类型变量每个字节的值是如何在内存中排列的呢?

通常来说有两种排列方法

  1. 把数据的地位值到高位值按照从左到右的方式依次排列,称为小端法
  2. 把数据的高位值到地位值按照从左到右的方式依次排列,称为大端法

例如:x变量的十六进制值为0x01234567,那么大端法和小端法的存储方式如下:

类型 0x100 0x101 0x102 0x103
大端法 01 23 45 67
小端法 67 45 23 01

大端法小端法只是两个方式,本质上没有优劣之分,且在大多数情况下,机器所使用的字节排列顺序都是不可见的。但需要了解,有些时候,字节顺序可能会导致一些问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 世界上没有一人不是自私的,没有一人不为自己或自己亲近的人着想,却从未对其他参与或没参与这些事的人一点着想都没有,这...
    朝若水阅读 1,814评论 0 2
  • 01 今年,我开始主动的学习育儿知识,着实看了不少育儿文章,感觉理论知识掌握不少。其中有一个欧美流行的方法叫让孩子...
    黑的白的黑阅读 5,317评论 1 1

友情链接更多精彩内容