1.3    “64-bit”相关因素

“64-bit”甚至“128-bit”,在实际应用中,这些概念究竟和什么相关?

试想,假如拿一个32位的操作系统在64-bit的硬件上运行,是否可以?

是否我们编译好一个windows程序,就可以在任何windows操作系统上运行?

Java吹的“一次编译,到处运行”是否真如其所言,如是,这个又是什么道理?

其实,“64-bit”这个概念是架构在硬件的CPU基础上的。而与其密不可分的,能有效体现“64-bit”和“32-bit”不同的,是硬件之上的软件。所以,与“64-bit”相关的,无非是这两大类。只是软件要适应硬件、发挥硬件潜能,还要依赖编译器这一特殊软件把高级语言代码转换为机器级别的ISA(instruction-set architecture,指令集体系结构)所认可的机器命令。

在之前,我们讲解了数据模型,不同bit位数的CPU支持的数据类型不完全相同,为了更好发挥机器的物理特性,我们编写程序的时候,就要利用这些更多bit位的CPU,这就给程序员带来一个问题,如何写“64-bit”的代码,或如何把“32-bit”的代码移植到“64-bit”的机器上来?

1.3.1        硬件

通常,“64-bit”首先指的是硬件,在硬件中,主要指的是“64-bit”的CPU。只有硬件提供了基础设施,软件才能有效架构在硬件之上。“64-bit”的CPU首先需要有“64-bit”的寄存器存在与“64-bit”的CPU。

目前,主流的“64-bit”的产品有AMD的x-64位的CPU,也有Intel的IA-64位的CPU。

1.3.2        操作系统

仅仅有了硬件是不够的,“64-bit”硬件效能的发挥,依赖操作系统,也依赖于程序员编写的代码中是否有64-bit”位的数据类型的使用[1]。

操作系统是程序员写出的代码编译后的产品,如果操作系统代码中定义的数据类型还是“32-bit”硬件所支持的数据类型,则这样的操作系统虽然能够在“64-bit”机器上运行,但是不能很好地把机器潜在的优势发挥出来。所以,需要有与“64-bit”机器配套的“64-bit”操作系统,即需要在操作系统代码中,使用“64-bit”的数据类型来扩大想要表示的数据或空间范围。

用户的应用程序也是这个道理,要想获得更好的性能,那么应该应用“64-bit”的数据类型、“64-bit”的指针表示更大的寻址空间。

现在,许多操作系统都发布了64位版本,用以支持“64-bit”的CPU;许多硬件配件商也发布了诸多的64位驱动程序,用以支持“64-bit”模式下硬件的使用。

如微软发布了windows xp 64-bit版本,Linux的诸多版本都支持64-bit硬件。

1.3.3        操作系统与应用软件

“64-bit”的应用能在“64-bit”的操作系统上运行。可是,“32-bit”的应用能否在“64-bit”的操作系统上运行?

在软件开发过程中,兼容性是一个提得很多的词。向后兼容[2]是计算机界的一个共识。所以,“64-bit”的操作系统需要能够支持“32-bit”的应运程序运行。比如,微软在“64-bit”机器上提供了WOW64[3],一个容性环境,它使得 32 位应用程序能够在 Windows 64 位操作系统上运行,但应用软件的计算、管理能力还处于“32-bit”水平。


[1] 这表现在是否有64-bit长度的指针和数值型数据被使用。64-bit长度的指针可表示更大的空间范围,64-bit长度的数据可表示更大的数值范围,这样,管理、计算能力就会增强。

[2] 兼容话题:数据兼容,文件格式兼容,程序兼容等等。

[3] Windows 32-bit On Windows 64-bit. WOW64 launches and runs 32-bit applications seamlessly. The system isolates 32-bit applications from 64-bit applications, which includes preventing file and registry collisions. Console, GUI, and service applications are supported. The system provides interoperability across the 32/64 boundary for scenarios such as cut and paste and COM. However, 32-bit processes cannot load 64-bit DLLs, and 64-bit processes cannot load 32-bit DLLs.――摘自MSDN

深入理解64-bit(三)相关推荐

  1. wireshark抓包理解TCP的三次握手

    一.实验目的 通过wireshark抓包工具,抓取客户机访问FTP服务器的连接过程进一步理解TCP的三次握手 二.实验拓扑 三.实验步骤 1.根据拓扑图搭建实验环境. 2.在客户机上安装安装Wires ...

  2. 深入理解C#第三版部分内容

     最近,粗略的读了<深入理解C#(第三版)>这本技术书,书中介绍了C#不同版本之间的不同以及新的功能. 现在将部分摘录的内容贴在下面,以备查阅. C#语言特性: 1.C#2.0 C#2的主 ...

  3. TLD(Tracking-Learning-Detection)学习与源码理解之(三)

    TLD(Tracking-Learning-Detection)学习与源码理解之(三) zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和这些 ...

  4. OWIN的理解和实践(三) –Middleware开发入门

    原文:OWIN的理解和实践(三) –Middleware开发入门 上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的M ...

  5. 统计|如何理解估计量的三条评价标准

    本博文源于<商务统计>,主要探究理解估计量的三条评价标准,为后面的假设检验学习作出相应的铺垫. 估计量起源 我们一般会用样本的一些特性去描述总体的一些特性,以达到最好的估计.样本去估计整体 ...

  6. 我理解的算法 - 三数之和及两数、三数之和扩展题

    我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...

  7. 举例理解Hibernate的三种状态:瞬时态、持久态、托管(即游离态)态及互相转化

    举例理解Hibernate的三种状态 初学Hibernate,了解到Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态). ...

  8. 深入理解Android(三):Xposed详解

    编者按:随着移动设备硬件能力的提升,Android系统开放的特质开始显现,各种开发的奇技淫巧.黑科技不断涌现,InfoQ特联合<深入理解Android>系列图书作者邓凡平,开设深入理解An ...

  9. 《深入理解JVM 第三版》 读书笔记

    2 Java内存区域与内存溢出异常 2.2 运行时数据区域 2.2.1程序计数器 程序计数器占用空间较小,可以看作当前 线程执行字节码的行号.因此是线程独立的. 如果执行的是native方法,则该计数 ...

  10. [第六章] 深入理解计算机系统第三版 家庭作业参考答案

    6.22 磁道数 d 与 r - x * r 成正比 设 d = k(r - x * r) = kr(1 - x) 总容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^ ...

最新文章

  1. 适合小团队作战,奖金+招聘绿色通道,这一届算法大赛关注下?
  2. xe ftp.config.php,用PHP实现一个高效安全的ftp服务器(一)
  3. 【深度思考】javaweb框架技术心得
  4. Python_位_成员_身份运算符
  5. DM8168心得之SD卡快速分区制作
  6. Oracle之用户操作
  7. Java Arraylist 如何使用 Comparator排序
  8. mysql中使用日期加减时无法识别年-月格式数据的问题,%Y-%m这种格式数据
  9. mongodb排序_MongoDB排序
  10. C#:获取Web.config中数据库连接地址
  11. 离散数学第二版屈婉玲教材pdf_离散数学 第二版 [屈婉玲,耿素云,张立昂 编著] 2015年版...
  12. Matlab图像显示
  13. Smart 200PLC PC Access SMART OPC通信
  14. python图像清晰度计算_Python 做图片清晰度识别
  15. java实时汇率的接口_基于JAVA的汇率换算接口调用代码实例
  16. treeoj 1206~1208 1212
  17. quast 的结果怎么看_使用quast评估基因组装配的质量
  18. python——加解密hashlib/hmac/random/secrets/base64/pycrypto
  19. python和java和c语言的区别-python和c语言的主要区别总结
  20. 虚拟机与宿主机网络互通配置

热门文章

  1. 【产业互联网周报】半导体并购潮持续爆发:Marvell100亿美元收购Inphi;Canalys报告:三季度全球云市场增长33%...
  2. 点击图片 图片放大 带有黑色背景图片
  3. Oracle 12c数据库定时备份和清理脚本
  4. 大三学生考研与自学的安排
  5. 京东实时数据产品应用实践
  6. 2020九月 京东大数据方向 Java 面试经验、面试题分享
  7. 怎么禁止别人复制前端页面的图片和文字?
  8. JS——[]==[]
  9. ESP32 Xtensa(HIFI4/5) 处理器架构总结
  10. java 线程亲缘性_亲缘性线程池,这是什么鬼?