面试官:说说32位和64位

news/2025/2/16 6:48:05/

在软件的世界里,有32位软件和64位软件,那么你是否想过32位和64位软件有什么区别吗?下面我就带领大家来看看32位和64位的区别。

第一个64位操作系统

首要的区别是32位和64位CPU的指令集合、操作数位数、寄存器名称和个数都不相同。例如mov eax,1指令,在32位CPU上对应的机器指令是0x1201;而在64位机器上就变成了0x123401。程序对于CPU而言,只是一系列顺序的在内存中的01代码。因为操作系统是直接运行在硬件上的,因此32位CPU只能运行32位操作系统。
这样的设计并没有什么问题,英特尔的64位架构的处理器就是这样设计的。但这里隐藏了一个问题,当我们需要升级硬件来提速,那么购买了新CPU后必须把部分运行在上面的操作系统或软件换掉。这个问题就是软硬件不兼容带,没有几个客户会去购买这种没法兼容原有软件环境的CPU。因此intel和amd都推出了兼容32位软件环境的CPU。所以现在主流CPU都是64位处理器,可以在上面运行32位和64位操作系统和软件。
一般来说编译器是一个应用软已,64位电脑上的64位编译器编译出来的也就是64的软件。那么第一个64位操作系统是如何来的呢?首先操作系统大部分是用C语言编写的,编写完后经过编译器编译成可执行文件,那么这里就有一个问题:第一个64位操作系统是用64位编译器编译的,那么这个64位编译器是运行在64位操作系统上的,那么这个64位操作系统从哪来的?因此一定存在一个或一种编译器,本身是32位的,但能将程序编译成64位可执行文件。也只有在这种情况下编译器本身位数和编译出来程序的位数才不一致,也才能编译出第一个64位操作系统。

操作系统位数和软件位数关系

在讨论这个问题前,我们需要先明白软件是如何运行的?首先会寻找需要引入的内容(头文件),然后编译成目标文件(二进制文件),但是呢目标文件是没法运行的,因为里面有一定有未知符号没有解析。目标文件经过链接,就形成了可执行文件。为什么经过链接就可以形成可执行文件了呢?这是因为操作系统提供了编译好的动态链接库,因此我们只经过链接后就能云行了。这个过程有两个非常重要的地方,动态链接库和系统API。
32位操作系统上是没有64位库文件的,因此如果应用程序源代码中引用了64位动态库中才有的函数,那么链接的时候就会出问题。我们很多程序会用到库函数,库函数的实现是依赖于系统API。例如在windows上程序大多数是以exe形式发布,exe文件本身是带有位数的。再比如在linux上大部分软件包rpm是编译好的,它们本身就是具有“位数”,但是如果是源码,那么应用程序还没有“位数”这一概念,你用多少位的编译器去编译它,它就是多少位的应用程序。注意:我们这里讨论多少位的程序,都是针对已经编译到目标文件以后的状态。
看完前面的内容,请各位思考一下这两个问题:

  • 64位的系统上是否能运行32位应用程序;
  • 32位系统上是否能运行64位应用程序。

如果你的答案和下面的一致,就说明你理解了本篇文章:

  • 对于操作系统来说64位系统上有32位库和其他信息,因此基本上兼容32位程序;
  • 32位操作系统一般是没有64位库。也没有相关系统api。因此一般情况下32位系统没法运行64位应用程序。

http://www.ppmy.cn/news/502178.html

相关文章

切换使用32位和64位的nodejs

切换使用32位和64位的nodejs 应用场景安装nvm查看已安装node版本列表安装node版本切换node版本卸载node版本命令汇总 应用场景 node对接32位动态链接库dll需要32位的nodenode对接64位动态链接库dll需要64位的node 安装nvm 下载地址:https://github.com/coreybutl…

PE结构详解(64位和32位的差别)

1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是“虚拟地址”而不是“物理地址”。为什么不是“物理地址”呢?因为数据在内存的位置经常在变,这样可以节省内存开支、避开错误的内存位置等的优势。同时用户并不需要知道具体的…

【py打包】通过pycharm在64位电脑上打包32位exe文件

因为各种原因,需要我把我写的py程序打包成exe文件给没有python环境的电脑使用,而那个电脑是32位系统的遗民,通过一系列摸索,终于解决了,记录一下。 在有源码的情况下,想让32位电脑能运行,无非两…

32位计算机精度,32位计算机和64位计算机有多大区别!

【【yzwaft】32位计算机和64位计算机有多大区别!】http://toutiao.com/group/6532802890778542600/?iid15906422033&appexplore_article&timestamp1521341712&tt_fromcopy_link&utm_sourcecopy_link&utm_mediumtoutiao_ios&utm_campaigncl…

python 64位程序 打包用于32位系统_pyinstaller在64位系统下打包32位程序

使用环境说明:win10 64位,已安装python3.6-64位版本 遇到的问题:win10 64位打包成exe文件后,不能在32位系统运行 需求:使用python打包生成exe文件,win64位和32位exe均可运行 解决方法:不需要更换…

怎么看台式计算机是几位的,怎么看电脑是32位还是64位?一目了然

我们的电脑系统是分出了32位和64位系统的,而我们经常下载的一些软件也需要我们选择是安装32位的还是64位的,为了识别大于4G的内存现在一般也建议安装64位的操作系统,但怎么看我们的电脑系统是32位的还是64位的操作系统呢?其实非常…

Python32位改换为Python64位

Python32位改换为Python64位 一、卸载32位Python(以Python3.7.0为例) 1.打开安装Python的文件夹,运行python-3.7.0.exe 2.选择卸载Uninstall 3.卸载成功 4.删除安装Python的文件夹 二、安装64位的Python(以3.8.6为例&#xff0…

32位计算机64位计算机实质,4G内存电脑安装32位还是64位win7系统?实际详细性能测试!...

在本站的系统安装教程中,经常会跟大家提到的安装提示其中有一点是,“如果电脑内存4G以上那么安装64位系统,如果内存4G以下那么安装32位系统”,那么如果电脑内存刚好是4G呢?这时候大家可能就疑惑了,这既不是4G下也不是4G上,该安装32位还是64位的win7系统好呢?有鉴于这个…