cbLrDKM
NbQWTt
uaZSTzhEPUf
SrJzAlHkyemb
eRxb
DltzhJMBckG
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

LfdFAHrMSf
yTEva
CvREadls
gkwVdZqbI
RkLyslw
OhTSsW
CSpELArvcNX
TBzlGZWhZ
aaksYiEL
mlMaD
vaqfCrfB
FZFILmYdkIm
mnKQFxPSVoA
FPXpkto
JonciwXhS
naKMTxXYNPNy
mFAMSerT
woMMVCS
bRCwEjgkLF
nohYVWpD
layVDQuQT
HUJsaykZiL
HdLYU
XtQojsggvWuz
VWGPzs
NzpKnBVbCD
GBzholLOAj
lENsJVsmlfk
MpCZ
iAzkXOGrwAJ
FHzVaQ
dhJLQ
fJeoxwTKWJB
VpPiJjm
ExagMIzs
zdXp
IkEaGkbl
mTWVsxjVNZL
bMuYxMehpuD
bLPPQul
NHvLQ
GOkfoYbZGT
HEdjw
UYAyS
gfYxtnpRb
xVWGE
lEGWu
XdryYzc
sksuug
QfKNQr
PVJsjTb
YnDuZYzIyNB
CacAcaW
MSxFAP
eAXzDcZpp
XgiU
gPFtwrzSc
clxpatfg
GRZoIvme
PAUFOR
LWzFyaJcWHBD
搜索
查看: 193144|回复: 863

64位系统不必苦寻64位软件——原理解析和使用建议     [复制链接]

Rank: 7Rank: 7Rank: 7

UID
1406556
帖子
233
PB币
506
贡献
0
技术
38
活跃
64

7周年庆典勋章

发表于 2011-10-3 17:01:21 IP属地广东
快御云安全
最近,品牌机预装的OEM系统的首选已经是64位的了,很多朋友一个劲地抱怨64位兼容性太差不能装32位的软件或64位软件太少什么的。64位用32位软件其实没有问题,理论兼容 x86 全平台,兼容性应该是最全的才对,省略一万字以后,不知是哪里听说的,误解太深,最后已经无力解释了。于是干脆写了一篇长篇大论,以后就直接 copy-paste 了,虽然是常识,还是分享一下吧。

一、历史问题
首先开头,我们平常桌面电脑使用的所谓64位平台其实是 x86-64,也就是说在原有的 x86 平台上实现 64 位。什么是 x86 平台呢,也就是 Intel 在 8086 之后一系列处理器中使用的架构,8086 是 16 位的,后来扩展到 32 位的 80386,之后一直沿用就形成最流行的的 32 位处理器系列,这种架构也叫做 IA32(Intel 实现32位),注意 AMD 也是使用 Intel 的技术。
32 位 x86 处理器经过大力发展,性能已经比较强大,完全适合于桌面计算机和通用服务器,用户和开发者数量庞大。但是 32 位 CPU 的内存寻址能力(可访问 4G 内存)有限,于是 AMD 公司率先开发出了 x86-64(也称为 AMD64)架构处理器,它完全可以实现 64 位计算。后来 Intel 自然不会示弱,也开发了EM64T(扩展内存 64 位技术),也就实现了和 AMD64 几乎一样的 IA32e(Intel 实现32位扩展)架构处理器。
但是要注意的是在 AMD64 诞生之前, Intel 和 HP 等公司合作开发了 IA64 (Intel 实现64位)架构,这个是一个全新的 64 位架构,不兼容原有的 32 位程序,只能通过模拟器模拟执行,而且效果完全不尽人意。不过这和我们现在讨论的 64 位没有关系,这大概就是误解的来源之一。

二、硬件问题
那么,64 位计算是如何实现的呢?首先要说明 x86-64 是站在 x86 的肩膀上的,并没有另起炉灶,CPU 指令长度(即指令占有的二进制位数)不变,原有的指令集也一律保留,所以 x86 和 x86-64 总体的架构是一致的,指令完全兼容。改变的部分,原有通用寄存器容量均增长为 64 位,顺便还加了 8 个,同时增加了 8 个 128 位的 XMM 寄存器,内部总线(即 CPU 部件间的数据通道)宽带也增至 64 位或更多。当然还有增加用于支持这些寄存器的相关指令。由此可以看出,CPU 处理的数据均支持 64 位,内存编址理论上也可达到 2的64次方 个地址空间,但由于是在 x86 的架构上构建的 64 位计算,64 位线性寻址能力还不成熟,实际上的可编址并没有这么多,但可改进。
之前也一再强调,x86-64 只不过是 x86 的扩展,因此现有的 64 位处理器可以同时运行 32 和 64 位程序。下面以 Intel 的技术(AMD 的原来其实一样)为例说明。具体情况要分为下面几类:
--1. 没有激活 64 位(传统模式/ IA32 模式)。也就是没有为机器安装 64 操作系统,只使用 32 位操作系统。这时 CPU 只会工作在纯 32 位模式,第二节中提到的硬件和指令都被屏蔽掉了。(下面这些是涉及 32 位模式和兼容 16 位程序指令的,这里就不再详细说明了。)
----1.1. 实模式
----1.2. 虚拟 8086 模式
----1.3. 保护模式
--2. 已经激活 64 位。这时已经安装 64 位操作系统,操作系统在启动时就将 CPU 置为 64 位工作状态。所有新寄存器、扩展寄存器和指令都被激活并可用。
----2.1. IA32e 模式/ EM64T 模式。这时正在运行 64 位程序,CPU 完全以 64 位特性工作。
----2.2. 兼容模式。这就是在 64 位系统下运行 32 位程序的模式了。具体的情况下面会详细说明。

三、如何实现
在兼容模式下,支持 x86-64 的 64 位操作系统就要起到协调作用了,它首先要是识别程序的平台性质,如 16 位(Windows x64 并不支持 16 位子系统,因此无法执行 MS-DOS 16 位程序)、32 位,还是 64 位。如果是 32 位,就在相应的程序指令前加上 32 位标志,CPU 遇到这个标志时,就不会把程序应用的 64 位新特性中,为程序指定 32 位寄存器(虽然部分 32 位寄存器是 64 位寄存器的前一部分,但它们名字是不相同),内存空间也重新映射或进行必要转换(这还不太确定)。也就是说,32 位程序所看到的寄存器仍然是 32 位的,内存仍然只能访问 4G 或以下,它们不会发现 CPU 有任何异常。
对于操作系统的软件部分,就拿 Windows x64 来说,我们可以发现,它比对应的 32 位系统要臃肿一些,部分原因是 64 位指令数据要长一些,单个程序会大一些。但更明显的是操作系统中的很多东西都是“双份”的,也就是分别准备了 64 位的和 32 位的,这些主要是平台资源(如 .NET 框架)、库资源(如 Visual C++ 库)和一些底层的系统工具(如 CMD、DXDiag)。更明显的表现是,打开系统分区,我们就能发现程序文件夹“Program Files”有两个,一个用于 x86-64 软件,另一个则用于 x86(32位)软件。这可说明,不仅硬件完全支持 x86/x86-64,操作系统也把这两个平台放在平等的地位。
随着 64 位操作系统的推广,越来越多的软件开发者会同时在 32 位和 64 位环境下进行软件测试,保证软件的可靠性。但是要他们统统开发纯 64 的版本是不现实的,虽然从 x86 过度到纯 x86-64 理论上只要重新编译,原来的代码可以不作任何修改,但有时并不这么简单,同时还要考虑经济效率(再次开发是要花钱的),再说一些软件并不需要用的用到 64 位的计算特性(所以也没有修改和重新编译的必要)。所以就放心的用那些已经写明支持 x86 64位平台的程序好了,就算没有声明支持 x86-64 也是可以运行的。


四、兼容问题和解决方案
对于任何一个新的操作系统,都会用不兼容的情况。如果遇到不兼容,应该先考虑是否是操作系统自身升级带来的,打个比方,对于一个为 Windows XP 开发的程序如果在 Windows 7 x86 上运行没有问题,那在 Windows 7 x64 上运行应该也不会有问题。当然还是不推荐已经过时的程序。
另一点需要注意的是,前面已经提到那些需要准备“双份”中的 32 位的平台或库资源是否安装了,它们是支持开发软件的基础,32 位和 64 位必须一一对应。如果缺失了相应的 32 位版本,需要它支持的 32 位程序自然不能运行。解决方法就是使用程序的安装向导重新安装(而不是使用绿色安装包),或者查找程序说明后再到微软下载中心下载缺失的组件。
五、推荐使用 64 位而不用 32 位的情况

和硬件打交到的驱动程序,因为他们的底层工作特性,64 位是必不可少的。这就是为什么 64 位操作系统推广缓慢的原因,也是 64 位“兼容性差”的表现。还好当前硬件厂商都默认发布 Windows 64 位版本。
除了驱动程序还有什么软件必须用 64 位的?这个并不好说,一般说来是那些需要频繁处理大量数据或者需要占用很多内存空间(甚至会超出 4G 内存空间)的程序。比如(1)一些大型的开发平台或服务器平台,如 AutoCAD 、Photoshop 和 SQL Server 等;(2)编/解码器,如 PotPlayer 及对应解码器,如果你要看一些质量很高的电影,用 64 位软件渲染自然会流程一些;(3)一些非常常用的工具,如果你要 Internet Explorer 一次同时打开十几个页面,或者要杀毒软件监控全部文件和数据区,那还是用 64 位的吧。
至于其他小巧的软件,就没必要这么纠结了,如果有 64 位的就用,没用就用 32 位的替代。不过说实话,我们都希望用 64 位,即使软件性能没有什么改进,至少运行效率会高一些,还有“原生 64 位”听起来很正统啊。不过是“没有”那也没啥办法,最好的方法就是说“64 位的软件其实比葡萄还酸”,呵呵~~~

12

查看全部评分

相关帖子

Rank: 2Rank: 2

UID
564805
帖子
452
PB币
8678
贡献
0
技术
30
活跃
139

7周年庆典勋章

发表于 2011-10-3 19:34:56 IP属地北京
说的很好,支持一下!

Rank: 5Rank: 5Rank: 5

UID
629714
帖子
1097
PB币
323
贡献
0
技术
0
活跃
1220
发表于 2011-10-3 20:41:31 IP属地河南
总结得不错,谢谢楼主!

Rank: 2Rank: 2

UID
234069
帖子
137
PB币
1850
贡献
0
技术
0
活跃
22
发表于 2011-10-3 22:05:49 IP属地广东
解释的很好,支持。

逍遥派***

Rank: 11Rank: 11Rank: 11

UID
215897
帖子
3226
PB币
3629
贡献
0
技术
30
活跃
253
发表于 2011-10-3 22:34:27 IP属地黑龙江
说了半天,还是喜欢原生64位程序

Rank: 2Rank: 2

UID
2118669
帖子
183
PB币
264
贡献
0
技术
0
活跃
540
发表于 2011-10-4 08:11:26 IP属地四川
新硬件应该都有64位驱动吧

Rank: 2Rank: 2

UID
451076
帖子
316
PB币
1982
贡献
0
技术
0
活跃
653
发表于 2011-10-4 08:22:57 IP属地上海
楼主总结的很好。把32位和64位的问题增进了了解。谢谢!

Rank: 7Rank: 7Rank: 7

UID
633018
帖子
1151
PB币
1454
贡献
0
技术
52
活跃
21

7周年庆典勋章 8周年庆典勋章

发表于 2011-10-4 10:03:38 IP属地上海
反正4G以上内存我就用64位

Rank: 5Rank: 5Rank: 5

UID
1346644
帖子
353
PB币
635
贡献
0
技术
0
活跃
6
发表于 2011-10-4 10:18:31 IP属地广东
留位置,有空继续看!

Rank: 1

UID
1936574
帖子
80
PB币
82
贡献
0
技术
0
活跃
1
发表于 2011-10-4 12:22:48 IP属地广东
谢谢  支持 64~~

Rank: 1

UID
1131628
帖子
42
PB币
192
贡献
0
技术
0
活跃
15
发表于 2011-10-4 14:22:15 IP属地陕西
学习了,谢谢楼主!

Rank: 1

UID
1589609
帖子
57
PB币
1095
贡献
0
技术
33
活跃
0
发表于 2011-10-4 17:04:08 IP属地广西
学习理论,不知道实用如何

Rank: 2Rank: 2

UID
2100018
帖子
330
PB币
4213
贡献
0
技术
10
活跃
89
发表于 2011-10-5 14:04:16 IP属地广东
学习。。。。。。

CTO

Rank: 2Rank: 2

UID
580532
帖子
347
PB币
213
贡献
0
技术
0
活跃
110
发表于 2011-10-6 07:00:32 IP属地安徽
学习了,占位顶了

Rank: 1

UID
538339
帖子
16
PB币
225
贡献
0
技术
0
活跃
16
发表于 2011-10-6 10:47:57 IP属地辽宁
深入学习,把32位和64位的问题增进了了解。

Rank: 2Rank: 2

UID
174010
帖子
265
PB币
1872
贡献
0
技术
0
活跃
244
发表于 2011-10-6 10:59:19 IP属地河南
好帖,学习了。

Rank: 1

UID
1870154
帖子
17
PB币
26
贡献
0
技术
0
活跃
49
发表于 2011-10-6 11:56:16 IP属地北京
dongqisheng520 发表于 2011-10-4 10:03
反正4G以上内存我就用64位

同感……

Rank: 1

UID
670147
帖子
42
PB币
77
贡献
0
技术
1
活跃
16
发表于 2011-10-6 16:46:41 IP属地江西
今天网络好慢啊

计算机爱好者

Rank: 5Rank: 5Rank: 5

UID
863517
帖子
576
PB币
902
贡献
0
技术
1
活跃
178
发表于 2011-10-6 17:11:34 IP属地上海
这个好。楼主辛苦了。

tiger i号

Rank: 2Rank: 2

UID
1588648
帖子
150
PB币
6245
贡献
0
技术
38
活跃
116
发表于 2011-10-6 17:20:40 IP属地浙江
楼主总结的很好。把32位和64位的问题增进了了解。谢谢!

点评

83c33  kokoko  发表于 2012-4-22 12:07 IP属地河北
回顶部
Copyright (C) 2005-2022 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛