老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Linux操作系统中x64和x86的区别是什么?老男孩Linux运维培训班

老男孩IT教育

行业新闻

2022年1月18日 15:50

在Linux操作系统中,往往有x64与x86两个版本,那这两者有什么区别?简单来说,区别就是CPU架构,一个是32位架构一个是64位架构,对于Linux运维人员来说,往往需要搞清楚这个问题,请看下文:

       在Linux操作系统中,往往有x64与x86两个版本,那这两者有什么区别?简单来说,区别就是CPU架构,一个是32位架构一个是64位架构,对于Linux运维人员来说,往往需要搞清楚这个问题,请看下文:

Linux运维培训班

       一、寄存器分配的不同

       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倍。

       关于"Linux操作系统中x64和x86的区别是什么?"的话题到这里就结束了,老男孩教育因材施教、分班授课;从0基础到高端运维,实现了Linux+云计算技术的完美过渡,你不会缺失任何一项技术。无论是零基础的大学生,还是行业新人,还是在职多年的IT人士,都可以来老男孩教育Linux云计算学院提升自己。

  推荐阅读:

       Linux运维常见故障排查和处理的小Tips汇总!老男孩Linux运维培训班

       对网站服务器进行监控需要关注哪些指标?Linux云计算运维培训

       在什么情况下,会导致服务器宕机?Linux运维课程

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。