x86 x64 IA64

 

 

x86:是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X与处理器没有任何关系,它是一个对所有*86系统的简单的通配符定义

采用 32位变长指令集,32位寄存器,32位直接寻址范围

 

X64:有时会称为“x86-64”,是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品。“x64”最先由AMD设计,推出时被称为“AMD64”,其后也为英特尔所采用,现时英特尔称之为“Intel 64”,在之前曾使用过Clackamas Technology (CT)、IA-32e及EM64T。外界多使用 "x86-64" 或 "x64" 去称呼此64位架构,从而保持中立,不偏袒任何厂商

 

IA64:有时会称为“IPF” Intel自推出32位微处理器以来,在高性能计算机领域的又一座里程碑。基于IA64处理器架构的服务器具有64位运算能力、64位寻址空间和64位数据通路,突破了传统IA32架构的许多限制,在数据的处理能力,系统的稳定性、安全性、可用性、可观理性等方面获得了突破性的提高。完全不兼容32位程序,更适合企业级Server端应用

 


相比传统32位架构,64位有如下的优势:

1  64位 CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存

2  64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件,64位数据结构支持的基础上的。

3  突破32 位平台有很多限制,这些限制正在阻碍大型应用程序(例如数据库)开发人员的工作进展,尤其对那些希望充分利用计算机硬件优点的开发人员来说更是如此。科学计算通常要依赖于浮点计算,而有些应用程序(例如金融计算)则需要一个比较狭窄的数字范围,但是却要求更高的精度,其精度高于浮点数所提供的精度。64 位数学运算提供了这种更高精度的定点数学计算,同时还提供了足够的数字范围。现在在计算机业界中有很多关于 32 位地址空间所表示的地址空间的讨论。32 位指针只能寻址 4GB 的虚拟地址空间。当然我们可以用软件自身克服这种限制,但是应用程序开发就变得非常复杂了,其性能也会显著降低。使用 32 位整数日期来表示的值所表示的是从 1970 年 1 月 1 日至今所经过的秒数。这在 2038 年就会失效。但是在 64 位的系统中,日期是使用有符号的 64 位整数表示的,这可以极大地扩充其可用范围。 

 

目前64也存在如下劣势:

1硬件———缺乏驱动程序,很多现有硬件无法使用

2软件———操作系统不是问题,但是软件出现不兼容难题

防火墙,带宽接入,Symantec与McAfee两家将暂停推出新版64位防毒软件

虚拟光驱软件,刻录软件都没有对应的64位版本



 Windows64位体系结构

MS提供了一个可伸缩的高性能64位平台,这种平台的体系结构可以更有效地处理海量数据,最高可支持16TB的虚拟内存。相对于32位架构4GB的限制,对于进行大量数值计算的用户而言,提高了很多效率。使用64位的Windows,应用程序可以将足够多的数据预加载到虚拟内存中,以便64位处理器快速访问这些数据。这种特性减少了将数据载入虚拟内存,以及查找读取数据并将数据写入数据存储设备所花费的时间,因此可使应用程序运行得更快、更高效。简单的说只要内存足够,64位电脑运行3D设计软件会快很多。打开任务管理器,看下程序的进程,如果进程名后面多了“*”号,则说明该进程是32位的,正运行在WOW64兼容模式下。反之,如果没有星号,则是纯64位程序,可以充分发挥64位的优势。

 

linux64位体系结构

建立在标准C上的linux受限于C 语言本身并没有提供一种机制来添加新的基本数据类型。因此,提供 64 位的寻址和整数运算能力必须要修改现有数据类型的绑定或映射,或者向 C 语言中添加新的数据类型。

 

 


64数据结构带来的的一些变化:

 

 

ILP32

LP64

LLP64

ILP64

Char

8

8

8

8

Short

16

16

16

16

Int

32

32

32

64

Long

32

64

32

64

long long

64

64

64

64

指针

32

64

64

64

 

这 3 个 64 位模型(LP64、LLP64 和 ILP64)之间的区别在于非浮点数据类型。当一个或多个 C 数据类型的宽度从一种模型变换成另外一种模型时,应用程序可能会受到很多方面的影响。这些影响主要可以分为两类:

数据对象的大小。编译器按照自然边界对数据类型进行对齐;换而言之,32 位的数据类型在 64 位系统上要按照 32 位边界进行对齐,而 64 位的数据类型在 64 位系统上则要按照 64 位边界进行对齐。这意味着诸如结构或联合之类的数据对象的大小在 32 位和 64 位系统上是不同的。

基本数据类型的大小。通常关于基本数据类型之间关系的假设在 64 位数据模型上都已经无效了。依赖于这些关系的应用程序在 64 位平台上编译也会失败。例如,sizeof (int) = sizeof (long) = sizeof (pointer) 的假设对于 ILP32 数据模型有效,但是对于其他数据模型就无效了。

总之,编译器要按照自然边界对数据类型进行对齐,这意味着编译器会进行 “填充”,从而强制进行这种方式的对齐,就像是在 C 结构和联合中所做的一样。结构或联合的成员是根据最宽的成员进行对齐的。清单 1 对这个结构进行了解释。



struct test {

         int i1;

         double d;

         int i2;

         long l;

}

 

给出了这个结构中每个成员的大小,以及这个结构在 32 位系统和 64 位系统上的大小。

结构成员

在 32 位系统上的大小

在 64 位系统上的大小

struct test {

 

 

int i1;

32 位

32 位

 

 

32 位填充

double d;

64 位

64 位

int i2;

32 位

32 位

 

 

32 位填充

long l;

32 位

64 位

};

结构大小为 20 字节

结构大小为 32 字节

 

注意,在一个 32 位的系统上,编译器可能并没有对变量 d 进行对齐,尽管它是一个 64 位的对象,这是因为硬件会将其当作两个 32 位的对象进行处理。然而,64 位的系统会对 d 和 l 都进行对齐,这样会添加两个 4 字节的填充。

 

*移植时还会遇到的其他问题可以参看另一篇。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值