-2

据我了解,“32 位”等于 2 32,这意味着我可以使用 32 位操作系统定义 4GB 内存。而“64 位”是 2 64,它允许 15EB。因此,使用 64 位操作系统,我们可以在计算机中放入更多内存。

但是,我对另一点感到困惑。

我们可以看到在 32 位的情况下,我们在系统中有(比如说)4GB 的物理内存,我们将 4GB 除以 32 位整数的大小,我们可以在其中存储一些整数(称为 N)记忆。而且,在 64 位中,计算是 4GB 除以 64 位整数的大小,所以我们只能存储一半的整数。因此,对于 64 位,我们无法在相同的内存中存储尽可能多的整数。

这是否意味着微软通过在 32 位和 64 位版本的操作系统中将此内存显示为“4GB”来欺骗我们?

4

2 回答 2

6

不,微软并没有通过在两种情况下都显示相同的内存来作弊。

“32 位”与“64 位”仅指指针的大小。两种类型的系统都有 8 位字节,因此无论您使用的是 32 位还是 64 位操作系统,相同的内存都是 4 GB 。

不仅仅是大小相同的字节。定义为int(在 C 中)的普通整数在两个系统上都是 32 位。如果是 Windows ,即使是定义为的整数long int在两个系统上都是 32 位(尽管 Linux 在 64 位系统上将其设为 64 位)。因此,您可以看到应用于操作系统的“32 位”或“64 位”术语与指针以外的事物的大小几乎没有关系。

而且,除此之外,存储在计算机内存中的大部分数据都不是指针,甚至不是可能改变大小或不改变大小的整数;它是图像的像素或字符串的字节或声音文件中的 16 位样本或程序中的计算机指令。这些都没有改变大小。因此,无论您使用的是 32 位还是 64 位操作系统,您通常可以在相同数量的内存中存储相同数量的“真实信息”。

(现在,内存中的某些数据当然是指针,因此当您处理主要是指针的事物时,使用 64 位操作系统可能意味着您为相同的数据使用更多内存。在非常罕见的情况下,这很重要,但它们非常罕见。即使如此,它仍然是相同数量的内存字节;你只需要更多。)

于 2012-12-23T05:16:28.673 回答
0

x86 使用字节寻址,因此 4GB 是相同数量的数据,无论是 32 位还是 64 位操作系统。

关于内存使用,x86_64 是经过精心设计的,因此指令大小不会增加太多或保持不变。由于需要较少的寄存器溢出,代码大小在某些情况下甚至可能更短。最重要的是,并非每种数据类型的大小都会增加。大多数操作仍然使用 32 位变量。唯一真正大小翻倍的类型是指针(long在 *nix 中)。所以实际上 64 位程序的内存使用量并不是 32 位程序的两倍。

于 2013-08-15T02:03:34.777 回答