Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 32位程序在64位操作系统上实际使用了更多内存吗?_Memory_64 Bit_Cpu - Fatal编程技术网

Memory 32位程序在64位操作系统上实际使用了更多内存吗?

Memory 32位程序在64位操作系统上实际使用了更多内存吗?,memory,64-bit,cpu,Memory,64 Bit,Cpu,在64位CPU上执行32位程序时,我们是否可以假设底层硬件将使用内存和CPU寄存器中的32位值来存储整数 考虑到这些设置: 英特尔i5+Windows 32位+32位应用程序 英特尔i5+Windows 64位+32位应用程序 请解释每个设置的缺点。使用第二个会不会因为CPU需要额外的工作来忽略寄存器值的暂停而降低效率?当x86_64处理器执行32位代码时,它实际上是在i686模式下运行的。这一切都是通过硬件实现的,因此没有性能损失 无论操作系统是32位还是64位,用户空间32位程序都将在“

在64位CPU上执行32位程序时,我们是否可以假设底层硬件将使用内存和CPU寄存器中的32位值来存储整数

考虑到这些设置:

  • 英特尔i5+Windows 32位+32位应用程序
  • 英特尔i5+Windows 64位+32位应用程序

请解释每个设置的缺点。使用第二个会不会因为CPU需要额外的工作来忽略寄存器值的暂停而降低效率?

当x86_64处理器执行32位代码时,它实际上是在i686模式下运行的。这一切都是通过硬件实现的,因此没有性能损失

无论操作系统是32位还是64位,用户空间32位程序都将在“32位模式”下执行,因此行为应该相同

唯一的潜在缺点是程序可能需要动态链接到一些默认情况下未安装在64位操作系统上的32位库。这种情况在Linux上更为常见,在Linux上,程序动态链接到外部库的情况更为常见;我在Windows上唯一能想到的例子是,如果程序需要VisualC++运行库,那么你就必须安装32位版本(如果可能的话,如果需要另一个程序,可能还附带64位版本)。所以简而言之,您可能需要安装更多64位设置的东西


此外,实际操作系统在64位设置上可能会消耗更多内存,但是32位系统的一个缺点是,您的整个系统内存大小限制为4GB(或者由于一些内存空间映射到硬件,实际上大约为3.5 GB)。

64位知识库:

我不想知道您可以访问多少,我知道默认情况下只能使用32位指针(我想没有bigmem)。我只是想知道,当你把一个整数放入内存(mov)时,你是否会以某种方式将一个64位值写入内存(因为CPU这样做可能会更快),如果不是,32位操作会慢多少个数量级(仍然需要大约一个mov)。32位模式,会慢吗?也就是说:用64位重新构建程序会更快吗?它应该需要更多的内存,但我想知道速度是如何受到影响的。如果它是相同的,那么如果你有足够的内存,为什么还要费心构建64位呢?64位模式有更多可用的寄存器,所以编译器可能会发出更高效的代码。此外,在64位模式下,对大于32位的数字进行的任何操作都将更加有效。这可能重要,也可能不重要,这取决于程序和它的数字运算量。