详解为什么32位系统只能用4G内存

 我来答
腾扬数码
2022-07-26 · TA获得超过2815个赞
知道小有建树答主
回答量:3679
采纳率:100%
帮助的人:199万
展开全部

Bit 是计算机最小的存储单位,大家都知道计算机实质上都是用二进制数 0 或 1 来存储数据的,所以 Bit 实际上可以看成存放 1个二进制数字的 1个位置。

我们平常讲的 1个文件占多少 KB、MB,1个硬盘占多少 GB、TB,后面的这个 B,指的就是字节 Byte,而不是上面的 Bit,而且 1个 Byte = 8 Bit,这个怎么理解呢?

其实 1个 Byte 可以看成是有 8 个物理上连续的 Bit 组成的,如下图:

上面说了,1个 Bit 只能表示两种值 0 or 1,其实就是 种值。那么 1个 Byte 就是 种值了。

介绍上面两个存储单位后就介绍下内存了。

内存有一个很重要的特性,CPU 可以直接访问内存里的数据。

CPU 不能直接访问硬盘的数据,只能先把硬盘的数据放到内存里,然后再从内存中访问数据。

所以内存才是计算机系统的主存储器,而硬盘则与光盘、U盘同为外部存储器。

内存里存放的数据是什么呢? 其实也是只是存放 0 或者 1 这两个二进制数字,所以内存里实际上有海量的小格子,每 1个格子是 1个 bit ,就只能存放 1个数字(0或者1),那么数值 255 就需要 8 个格子存放,也就是 1个字节 byte

但是问题来了,我刚说内存里的格子数量非常巨大,如果 CPU 要读出某个指定的数据,怎么去找呢?

1个 1个格子去遍历吗?其实稍微接触过数据结构的都知道,遍历虽然实现简单,但是在海量数据面前简直是自杀行为。

所以实际上内存是把 8个 8个 bit 排成 1组,每 1组成为 1个单位,大小是 1 byte (字节),CPU 每次只能访问 1个 byte,而不能单独去访问具体的 1个小格子(bit)。 1个 byte 字节就是内存的最小的 IO 单位

也就是说内存是由 8个 8个小格(bit)组成的 1个字节单位(byte)排列组成的。 如下图:

其实大部分数据都会作为各种数据类型存放在内存内,而各种数据类型所占的字节大小也是不同的,例如上图解析的,char 字符类型占 1个字节,int 类型和 unsigned int 类型占 4 个字节 byte。

即使我们把内存分成了以字节为单位的结构,但是实际上内存里还是有非常多的字节的,例如 64 MB内存就有 64 × 1024 × 1024 个字节!

如果 CPU 要查找 1个变量,还是要一个个字节去找到话,还是很浪费时间的,所以为了避免去遍历内存,计算机系统就引入了内存地址这个概念。

举个例子,内存就是一栋大楼,而内存里每 1个字节就是大楼的每个房间,而内存地址就是房间的门牌号码。如果没有门牌号码,我们去访问某个住在大楼的人是十分困难的,只能从 1 楼开始每个房间去敲门,如果那个人住在顶楼你就悲剧了。而如果你知道那个人的门牌号码,就可以直接上去敲他的门查他水表了,实在是方便很多。

内存也一样, 计算机操作系统 会给内存每 1 个字节分配 1 个内存地址,CPU 只需要知道某个数据类型的地址,就可以 直接 去到对应的内存位置去提取数据了。

当代计算机还实现了一个逆天的技术,就是直接寻址了。

什么意思呢?还是用上面的例子说明,假如你知道你要找的人住在那栋大楼的 17 楼 1702,但是你还是需要从 1 楼走到 17 楼去找他,这个过程还是需要时间成本的。

但是如果你具有了直接寻址技术,就能直接跳到 17 楼 1702 门前,如果你找的下 1个人在 2 楼,又能从 17 楼直接跳到 2 楼。

直接寻址技术已经成为当代计算机软硬件的标准技术之一了,也就是说只要 CPU 知道要访问数据的内存地址,就能直接到内存的对应位置去访问数据。

跟门牌号一样,其实内存地址也是由 1个 2 进制数字来表示的。每 1个地址对应内存里的 1个 byte 字节,如果地址的值加 1,那么这个地址就对应下 1个字节了。

那么内存地址的长度是多少呢?这个就是这篇文章标题所涉及的。在32位操作系统中, 内存的地址就是 32 位的 2 进制数

上面说了,既然 32 位系统里内存地址长度是 32 位的,所以 32 位的地址范围就是从 0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 (0x00000000 ~ 0xFFFFFFFF), 总共有 个地址。

那么 到底是多少个? ,就是 4G ,而每 1个地址对应 1个字节,容量就是 1 byte,所以 个地址就总共能对应 4GB 的内存容量,这里的 B 指的是 byte 字节。

假如给 32 位的系统配上了 8GB 的内存,操作系统最多也只能给其中 4GB 分配地址,其余 4GB 是没有地址,因为地址不够用,所以 32 位系统最多支持 4GB 内存就是这样来的。

那么64位系统呢,对应的,64 位系统的内存地址是 64 位的二进制数,那总共有多少个地址?

个地址, 也就是说 64 位系统配上 64 位 CPU 理论上支持 16777216TB 的内存, 当然这个只是理论了,实际上现在的普通主版能上个 32GB 都不错了。

见下图:

大家都知道指针是用来存放内存地址的,那么对于 32 位系统来讲,内存地址是 1个 32 位长度的 2 进制数,而每 1个内存单位长度只有 1 byte = 8 bit(位),所以 1个指针就需要 4 byte 的内存来存放该指针的内容(1个内存地址)。

所以,我们定义 1个指针 int *p; 然后求 sizeof(p) 是返回4字节。

而对于 64 位系统来讲,内存地址是 64 位的 2 进制数,所以 sizof(p) 就返回了 8,共需要 8 个内存单位去存放 64 位系统的 1个指针。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式