Linux系统中x86跟x64的区别是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统中x86跟x64的区别是啥相关的知识,希望对你有一定的参考价值。

参考技术A Linux操作系统中x64和x86的区别如下:
一、寄存器分配的不同
64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;
32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;
64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;
二、函数调用的不同
x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;
许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;
一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。
三、参数传递的不同
6个寄存器用来传递参数;
剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);
调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;
四、栈帧的不同
很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:
a. 本地变量太多,寄存器不够;
b. 一些本地变量是数组或结构体;
c. 函数使用了取地址操作符来计算一个本地变量的地址;
d. 函数必须用栈传送一些参数给另外一个函数;
e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)
五、运算速度的不同
64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。

OpenMPI v1.X 与 v2.X - 主要区别是啥?

【中文标题】OpenMPI v1.X 与 v2.X - 主要区别是啥?【英文标题】:OpenMPI v1.X vs v2.X - What are the main differences?OpenMPI v1.X 与 v2.X - 主要区别是什么? 【发布时间】:2017-12-22 06:03:35 【问题描述】:

许多系统(例如 Google Cloud Compute 实例)都预装了 OpenMPI v1.X。 由于 v2.X 已经发布了一段时间,是否总是最好升级并改用它?主要区别是什么?一般性能和稳定性有区别吗?我一直在到处寻找这些信息,但除了详细和增量的更改列表之外,我找不到一般概述。

【问题讨论】:

【参考方案1】:

主要是添加 MPI-3 功能,弃用对旧系统的支持,并更好地支持 MPI-IO(从 ROMIO 移至 OMPIO)。

更多信息可在these slides 中获得,在 Supercomputing 2014 大会上发表。

【讨论】:

以上是关于Linux系统中x86跟x64的区别是啥的主要内容,如果未能解决你的问题,请参考以下文章

linux与其他操作系统的区别是啥?

redis

linux和ubuntu区别是什么?有什么关系?

实现操作系统 00x86 与 x64 架构下函数参数传递的区别

X86(32位)与X64(64位)有什么区别,如何选择对应的操作系统和应用程序?

云服务器一般使用什么系统?Linux还是Windows?