当前位置: 首页 > news >正文

h5网站制作案例分析深圳宝安上市公司网站建设报价

h5网站制作案例分析,深圳宝安上市公司网站建设报价,电商平台有哪些软件,学做标书的网站有一个建议说时函数传递参数最好不超过四个,原因有一个是参数太多难以维护,另一个重要的原因就是函数传递小于四个参数时候效率会更高,其实这个说法也不全对,在不同的结构下不太一样,也不一定是4 其实那么下面将探究函…

有一个建议说时函数传递参数最好不超过四个,原因有一个是参数太多难以维护,另一个重要的原因就是函数传递小于四个参数时候效率会更高,其实这个说法也不全对,在不同的结构下不太一样,也不一定是4

其实那么下面将探究函数参数传递相关的问题

X86架构

这里拿比较常用的cdecl举例,先来一个简单的函数去传递六个参数去看传递的过程

#include <stdio.h>   
#include <stdlib.h>int foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
{  int array[] = {arg1, arg2, arg3, arg4, arg5, arg6};return 0;
}       int main ()
{foo(1, 2, 3, 4, 5, 6);return 0;
}    

foo(1001, 1002, 1003, 1004, 1005, 1006)的反汇编:

ESP为栈顶,每条都将一个立即数(常量值)存储到相对于堆栈指针esp偏移一定字节数的位置,也就是将这四个参数进行了压栈处理

int array[] = { arg1,arg2,arg3,arg4,arg5,arg6 }的反汇编:

会发现每回都从栈[rsp+0xXX]里面取到一个参数,并放到array里面

X86的参数传递调用约定

在32位的调用约定有cdecl(C标准),stdcall(WinAPI默认),fastcall三种

cdecl,stdcall下规定参数传递顺序为从右到左依次压栈

fast下规定参数1、参数2、参数3、参数4分别保存在 RCX、RDX、R8D、R9D ,剩下的参数从右往左一次入栈

X64架构 

传递6个参数

#include <stdio.h>   
#include <stdlib.h>int foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
{  int array[] = {arg1, arg2, arg3, arg4, arg5, arg6};return 0;
}       int main ()
{foo(1, 2, 3, 4, 5, 6);return 0;
}    

 foo(1001, 1002, 1003, 1004, 1005, 1006)的反汇编:

可以发现1,2,3,4四个变量分别存入到了EAX,EDX, R8D, R9D中了

但是多出去的5,6两个变量传递也压到了栈里面,

后面的过程1,2,3,4四个值会直接从EAX,EDX, R8D, R9D四个寄存器中拿到

而5,6就需要[rsp+0x28]和[rsp+0x20]中拿到了

X64的调用约定

参数1、参数2、参数3、参数4分别保存在 RCX、RDX、R8D、R9D ,剩下的参数从右往左一次入栈

ARM架构

ARM的CPU结构和X86不一样,所以寄存器的命名不一样

和X64方式差不多,前四个参数放到了r1,r2,r3,r4四个寄存器中,剩下的也进行了压栈

Arm的调用约定

ARM和ARM64使用的是ATPCS(ARM-Thumb Procedure Call Standard/ARM-Thumb过程调用标准)的函数调用约定
参数1~参数4 分别保存到 R0~R3 寄存器中 ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 R0 中

区别和结论

当直接访问寄存器的时候,不进行内存访问,CPU访问寄存器的速度大概在1-2个时钟周期
当你从[rsp+0xXX]获取数据时,实际上是在进行一次内存访问,内存访问的时钟周期大概在几十到上百之间,但是现代CPU的chche的结构会缩短这个时间,但是远远和直接访问寄存器的访问速度差的很远

可见,在特定的结构中,参数数量会对程序访问参数的速度有着一定的影响

http://www.yayakq.cn/news/748915/

相关文章:

  • 举报网站建设运行汇报店面设计师招聘
  • 网站建设算行政工作吗shopify做国内网站
  • 怎样做php网站东营信息发布平台
  • 网站建设意义和作用免费友情链接
  • 免费网站建设模版云盘苏州网站建设招标
  • 用模板搭建的网站备案吗自己可以做网站放在百度上面嘛
  • 计算机基础网站建设和网络安全专门查企业信息的网站
  • 网站制作价格表模板线上平面设计培训班
  • 建站模板行情手机电影网站怎么做的
  • 徐州建站费用网站 建设 网站设计公司
  • 网站跟软件有什么区别是什么上海网站制作福州
  • 网上学设计哪个网站好张家港保税区建设局网站
  • 网站打开慢的解决方法网页制作软件dw论文
  • 制作公司网站教程wordpress主页图片怎么让它轮播
  • 学生想搭建网站怎么做全球商业网
  • 山西做网站运营的公司装个网络要多少钱
  • 哈尔滨网站制作费用外国网站界面
  • 杭州建设企业网站网站优化北京多少钱
  • 个人宽带弄网站可以吗怎么做网站板块
  • 龙采做网站要多少钱网站开发制作学徒
  • 电子商务网站建设新手做网站是不是太麻烦了
  • 受欢迎的企业网站建设企业网站如何进行seo
  • 最方便建立网站网站 要强化内容建设
  • 郑州的网站建设苏州做网站0512jinyan
  • 网站菜单导航怎么做的东莞网站推广服务
  • 公司做网站提供资料温州网站建设制作公司
  • Python做网站 性能网站开发拓扑图
  • 哈尔滨在线制作网站中讯科技-运城网站建设
  • 开发大型网站的流程网站建设培训达内
  • 福建漳州网站建设公司官网小程序