复杂度2/5
机密度2/5
最后更新2021/04/26
32位64位问题
这个问题说简单,很简单,说复杂,也挺麻烦的,因为这不仅仅是32位64位程序或代码,还包括好多你没想到的事情。
如果体系架构是64位的:
- 64位的架构体系允许64位的地址操作,包括有效地址EV(Effective Address),用于指令操作;物理地址,用于定位内存卡上的数据;
- 处理数据单元可以是64位的(当然CPU也能处理更小的数据),例如单指令移动64位数据,指令可操作64位整型数计算
如果计算机是64位的:
- 是64位架构的一种具体实现:能执行64位指令;可以单指令操作64位数据;可以直接寻址超过4GB大小的地址
- 有64位(甚至更)宽的CPU互联总线
32位和64位设计之间不是自动的兼容或者包容关系,实际上,在计算机发展过程中,从32位向64位转换,很多公司都付出了血的代价。例如第一个吃螃蟹的DEC Alpha CPU,由于64位CPU无法兼容执行32位程序二进制代码,而最后身死族灭;Intel的IA64也由于同样原因而失败,导致Intel不得不与AMD交叉授权CPU指令集设计,无力剿灭AMD,养虎为患,至今甚至被AMD频频翻盘。
其它还有操作系统是32位还是64位,应用程序是32位还是64位等诸多问题,在后续的编程介绍中我们会更详细介绍32位与64位的具体有哪些差别。
大端小端问题
CPU在处理数据的时候,是把先处理的当作高位还是低位决定了CPU是大端还是小端CPU。例如,我们人类的正常操作是大端的,1000被当作一千,高位在前,0001是1,低位在后。因此在很早以前设计CPU的时候,几乎所有的CPU都是大端的,IBM Power也不例外。然而,出了Intel这样一个异类,x86 CPU是小端的。至于是什么原因导致Intel做了这样的设计,有种种说法,其中比较靠谱的说法是小端设计在进行计算和移位处理时,会更快一些,因为设计的计算电路都是从低位开始计算,逐渐推进到高位,而小端设计恰好付合了电路设计,如果是大端,反而要翻转一下。也就是小端设计,虽然”反“人性,但更付合数学的内在逻辑,反而大端方案,是人类约定熟成的一种没效率的表达。
不管什么原因,大小端是计算机CPU必须要考虑的问题,由于现在x86大行其道,几乎所有的设计和操作都是小端方案,至少必须支持小端模式,PowerCPU也不例外,它没放弃大端,但CPU本身可以通过指令位标记来控制当前CPU运行在大端模式还是小端模式。大家只要记住Power CPU同时支持大小端模式,如果跑AIX,那就是大端的;如果跑最新的Linux,基本都是小端的。