.Net Framework开发的时候为什么会分为x86和x64平台,有什么作用,目的是什么?

MSIL都知道吧
.Net framework的中间语言, 在所有的windows上只要有Net framework 的运行时类库执行效果就是一样的.
编译.net程序的时候都是编译成为IL语言的. 运行的时候会通过JIT编译为本机代码来运行.

那为什么编译的时候还会区分 x86和x64呢? 有两套IL?
.Net framework不是用的虚拟机运行的吗.
分别针对x86Cpu和x64Cpu的意思是有两种虚拟机?一个32位虚拟机,一个为64位虚拟机?

.Net Framework开发是在系统上开发的。系统分为(x86)和64位(x64)两种版本
Windows XP、Windows vista、Windows Server 2008,以及处于测试阶段的windows7,都有32位(x86)和64位(x64)两种版本。
面对两种版本光盘镜像下载,常常让有些网友不知所措:究竟选择哪个版本更好一些?
下面,我用最简洁的文字尽可能作最详尽的回答:两者之间存在的“五大不同”。
与此同时,着重说明Microsoft Windows64位(x64)操作系统,相对于32位(x86)操作系统的最大优势和劣势是什么?

第一,设计初衷不同。64位操作系统的设计初衷是:满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求。换句简明的话说就是:它们是高科技人员使用本行业特殊软件的运行平台。而32位操作系统是为普通用户设计的。

第二,要求配置不同。64位操作系统只能安装在64位电脑上(CPU必须是64位的)。同时需要安装64位常用软件以发挥64位(x64)的最佳性能。32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上。当然,32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位效能就会大打折扣。

第三,运算速度不同。64位CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。

第四,寻址能力不同。64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,因此一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。比如,Windows Vista x64 Edition支持多达128 GB的内存和多达16 TB的虚拟内存,而32位CPU和操作系统最大只可支持4G内存。

第五,软件普及不同。目前,64位常用软件比32位常用软件,要少得多的多。道理很简单:使用64位操作系统的用户相对较少。因此,软件开发商必须考虑“投入产出比”,将有限资金投入到更多使用群体的软件之中。这也是为什么64位软件价格相对昂贵的重要原因(将成本摊入较少的发售之中)。

总而言之,Microsoft Windows 64位操作系统,必须“上”靠64位主机硬件的支撑,“下”靠64位常用软件的协助,才能将64位的优势发挥到极致,“三位一体”缺一不可(道理很简单:操作系统只是承上启下的运行平台)。至于64位电脑可以安装32位操作系统,64位操作系统可以安装32位软件,那是设计上的“向下兼容”,不是64位设计初衷的本来含义(如上所述)。

注:

1、64位电脑虽然可以安装32位操作系统,但是32位电脑绝对不能安装64位操作系统。这点至关重要务必牢记,以避免盲目下载和安装。

2、在64位电脑运行的32位操作系统上,不能采取硬盘安装方式安装64位操作系统。如若安装,首选光盘格式化安装方式,也可采用比较繁琐的DOS安装方式。

3、使用虚拟机安装操作系统,实际上就是在目前运行的操作系统上安装软件。因此,在32位操作系统上不能虚拟安装64位操作系统。即便采取“曲线”方式勉强安装,其实已经脱离了底层设备的支持,是毫无疑义的。

参考资料: 网络搜索
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-24
我以从事开发.Net Framework 3年。
把 .Net framework 称为虚拟机确实不太准确,你所编译的程序是一个机器语言的外壳套一个字节码语言(中间语言),你的程序机器代码会请求.net 类库处理中间语言再编译为机器语言。
虽然在运行期间有一个再编译过程,它的外壳仍然是机器语言,这就意味着x64的程序不能直接在32位机上运行,而低位可在高位运行。我曾在手机开发中把16位的.net Windows mobile手机程序在电脑上正常运行。追问

就是说目标平台为x64的话,和x86的IL代码是不一样的喽,而且不能在x86版本的运行库下运行?
那所谓的统一平台,一次编译之类的想法不是还是不行吗.

追答

x64和x86的IL基本是一样的。
统一平台已经实现,但统一平台不要求一次编译,只是说在不改动源代码的情况下,可以实现平台转换。IL的一样不代表exe的一样。
我可以直接告诉你,所有基于Windows下64位可执行文件exe的程序不可能在Win32 运行。
所有统一平台的语言如Java, AS3。必然不是直接由exe运行。

追问

可是, .net程序集里面保存的是IL和程序集信息, 执行的时候由JIT来编译为本地环境的啊.
也就是说, JIT以后的才是64位本地代码或者32位代码呀.
没有JIT之前的时候为啥还是分开目标平台呢. 遇到什么环境都自动JIT处理不好吗?

追答

我已经说过了,像你说的那样的那一定不是exe后缀的文件。exe必须先由系统处理,不可能有程序打开。
如果.net 就是个虚拟机,要它何用,他还能结合C++的非托管代码,.com标准,调用非托管语言的Dll吗?

追问

好吧. 大概是这个意思吧.
.net程序集exe程序在执行的时候,是用本地代码来调用JIT来处理自己内部的IL然后再执行具体功能.

追答

差不多就是这个意思

本回答被提问者采纳
第2个回答  2011-12-24
32 位的系统只有4 GB 的内存寻址能力,而 64 位就高级多了。
第3个回答  2011-12-24
32位和64位内存字长不同,底层代码也会不一样。
第4个回答  2011-12-16
X86针对32位CPU进行开发,X64针对64位CPU进行开发追问

.Net framework不是用的虚拟机吗. 有两种虚拟机?

追答

怎么会是用虚拟机,.NET Framework是一个运行环境,从vista开始,微软在系统中已经集成了这个环境,所以你下载一些.NET开发的软件也好游戏也好都不会提示你再去安装,如果你用xp,很多时候你运行.NET开发的程序是会提示你安装.NET Framework 某版本,如果你针对x64 CPU进行开发的话,在x86环境下很可能运行会出现问题,推荐你去看一下 CLR via C#,经典巨作!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网