我们有时候会遇到这样一种情况:我们在32位操作系统上下载了64位版本的程序,却发现无法安装,大家可能会很困惑。

下面就来简单解释一下32位程序与64位程序的具体区别。

我们首先要弄明白的:

1.这里所说的的32位与64位程序,是指经过编译后的可执行文件,例如像Windows上的exe文件,而最初编写的源码并没有32位和64位之说。

2.不是所有的程序需要区分32位和64位,对于原生语言例如C语言编写的程序需要区分64位与32位,但是对于像Java这样的语言,就不需要这样了,因为Java编写的程序是在JVM(Java虚拟机)上运行的,JVM屏蔽了具体的硬件细节。

3.32位与64位的程序的本质区别在于:两者最终在处理器上运行的指令是不一样的。

由于两者本质的区别在于处理器执行指令是不一样的,因此我们从CPU开始说起。

1.64位CPU与32位CPU

这两者的指令集合、操作数位数、寄存器名称和个数等等都不相同。

一、比如一条mov eax,1指令,可能在32bCPU上对应的机器指令是0x1201;在64位机器上就是0x123401。

二、64位CPU里的寄存器是64位的,这样CPU每次处理的数据量也就更大,32位CPU寄存器是32位的。

三、64位CPU里的寄存器数量也多于32位CPU。

四、32位CPU的地址总线不一定是32位的,还有可能是48位的,同样64位的CPU地址总线也不一定是64位,往往都是48位。

五、现在对于主流的处理器,64位的CPU是能够兼容32位指令架构的!!!!!!

从上面可以看到64位CPU的运算能力理论上比32位CPU强很多。

现在32位的CPU一般是X86架构的,从80386开始就是32位的CPU,也对应他的32位指令集。

后来发展出64位CPU,从X86扩展出64位的指令集,一般我们就叫做X64,也叫AMD64架构,因为最早是AMD推出64位CPU的。

2.32位的操作系统与64位的操作系统

32位的操作系统是专门为32位CPU设计的,同样64位的操作系统是为64位的CPU设计的。

前面也说了,64位的CPU能够兼容32位指令架构,因此在64位CPU上也可以安装32位操作系统。

32位的win7可以支持4G的逻辑地址空间,但其中用户能够分到的只有大约是3G多,还有一部分是分给系统内核了,64位的win系统,理论上寻址范围能够达到264。在这里多说一句,操作系统负责逻辑地址到物理地址的映射,因此32位的操作系统只能利用最大4G的物理内存,注意点大家需要注意。

3.32位应用程序与64位的应用程序

32位的程序就是将源码用32位的编译器编译的,64位的程序就是将源码用64位的编译器编译的。

应用程序只接触逻辑地址,并不接触真实的物理地址。

32位的程序理论上可以申请利用4GB的地址空间,64位的程序则可以申请利用大于4GB 的地址空间,这也是64位程序的一个巨大优势。

我们知道应用程序的运行是需要操作系统作为支撑的,这些程序在运行时常常需要进行一些系统调用,还有各种库函数等。

这些可执行文件能否顺利运行有着两个最重要的地方。

1)动态链接库。
2)系统API。

对于Windows系统而言,64位的系统往往具有32位系统的库,因此在64位系统上能够运行32位的程序,但是反过来就不行了,因为32位系统一般没有64位系统的库。

32位升级到64位不是简单的重新编译发布一下就可以了。举个例子,在32位C语言环境里一个指针可以放入一个int型的变量中,但在64位里就不行了了,因为64位程序里的指针为64位,这样的话程序肯定就爆了,因此对于某些程序如果想要升级到64位,则需要修改源码,这个工作是相当繁琐的。

总结

1.32位CPU只能安装32位的操作系统,而32位操作系统只能运行32位的程序。

2.64位CPU可以运行32位或者64位的操作系统,64位操作系统可以运行32位或64位程序。

3.64位版本的程序占用的内存空间更大,因为它的指针是64位的,但同时它又可以申请更多的逻辑地址空间。

4.大家可能会疑问,第一个64位的程序是怎么来的,因为那个时候还没有64位的编译器,其实很简单,32位的编译器也可以编译出64位的程序 ,当然这个问题就没有必要深究了。

5.2006年之后的CPU都是64位CPU。

32位程序和64位程序相关推荐

  1. [思考]-32位的应用程序和64位的应用程序有什么区别

    文章目录 1.32位的应用程序和64位的应用程序有什么区别 2.在aarch64的linux os中,是否同时支持运行32位app和64位app ★★★ 链接 : 个人博客导读首页-点击此处 ★★★ ...

  2. 使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

    原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表 我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的 ...

  3. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错

    已结贴√ 问题点数:20 回复次数:3 32位windows下可以运行的程序在64位linux下报错 filt.c在32位windows code:blocks 10.05下运行无任何异样. 传到64 ...

  4. 32位dll转64位工具_如何在64位系统中运行32位或16位程序

    由于CPU和系统架构的更新,现行主流的Windows系统已经是64位.然而许多人还恋恋不舍的一些老游戏或老程序已经没有了更新.在64位的系统上运行这些程序,往往会出现运行故障.如何才能解决这个烦心事? ...

  5. 32位程序在64位系统上运行

    32位程序在64位系统上运行 32位系统下的MFC文件,怎么在64位的系统上面运行? 先将32位的应用程序转换为64位的应用程序. 从32位应用程序到64位应用程序 编译:starlight 这篇文章 ...

  6. 32位程序和64位程序这些区别你知道吗?

    我们在编写C/C++程序时,32位程序和64位程序的代码有何区别?如何编写既可以编译成32位程序又可以编译成64位程序的代码? 代码上的区别 实际上,对于32位程序和64位程序来说,代码上的区别不大, ...

  7. c语言的程序是32位还是64位,在C语言中,对于32位计算机和64位计算机,long的大小是多少?...

    本问题已经有最佳答案,请猛点这里访问. 对于32位平台,C中的long的大小为4字节,而对于64位平台,为8字节是否正确? 通常,但不一定. 如果要使用固定大小的类型,请使用int32_t或int64 ...

  8. 32位应用程序操作64位Windows注册表的方法

    64位的Windows操作系统中能够运行32位的应用程序,主要是由于Windows中提供了WOW64子系统. 1.WOW64子系统 WOW64 (Windows-on-Windows 64-bit)是 ...

  9. 32位程序注入64位DLL到64位进程

    向其他进程注入DLL通常的做法是通过调用CreateRemoteThread这个API在目标进程内创建一个远程线程,用这个线程来调用LoadLibraryA或LoadLibraryW(下文统称Load ...

最新文章

  1. 基础知识——操作列表(三)
  2. 如何强制“ git pull”覆盖本地文件?
  3. Linux二十年产权官司告终:IBM赔偿近亿元,期间“熬死”一位起诉方
  4. java sessionstate_在Java Web开发中自定义Session
  5. 稳定菜篮子市场供需 农业大健康-林裕豪:从玉农业全力保障
  6. 腾讯云服务器 linux 镜像安装项目环境mysql心得
  7. 容器学习 之 安装docker(二)
  8. P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)
  9. 是男人就过 8 题--Pony.AI 题 - A String Game
  10. reg 正则表达式^
  11. 学长分享:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
  12. nbu里oracle备份al开头的,认识NBU备份Oracle时Code 29错误
  13. 常见ERP软件简单介绍与个人评价
  14. 云计算与大数据概论(1) 云计算,大数据是什么
  15. 这不就是微信朋友圈屏蔽功能吗?推特现在才做出来未免太迟了吧
  16. 国际知名财务和ERP软件系统
  17. 学计算机前后对比的图片,大学生“修图前后”对比照,差距一目了然,男生帅气女生惊艳...
  18. [jzoj 4249] 【五校联考7day1】游戏 {贪心/斜率优化}
  19. 企业oa管理系统是什么
  20. 工作组与域网络的特点与区别(下)

热门文章

  1. 代码编程在线运行网站
  2. [LLVM教程]LLVM之第一个语言前端
  3. OpenCV技巧篇——多目标视觉定位(以飞镖定位为例)
  4. ZYNQ之路--初级开发流程介绍
  5. Python实现数独游戏(一)—— 效果展示
  6. 单片机应用系统设计技术——基于51单片机篮球计时计分器的设计
  7. utils.data的使用
  8. [含lw+源码等]微信小程序点餐|外卖|餐饮系统+后台管理系统[包运行成功]
  9. 计算机毕业设计Java某日杂商店进销存管理系统设计(源码+系统+mysql数据库+lw文档)
  10. jOOQ 代码生成工具的使用说明