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

免费的行情软件app网站怎么查百度竞价关键词价格

免费的行情软件app网站,怎么查百度竞价关键词价格,网站制作公司都找乐云seo,附近广告公司位置C中的this指针一直比较神秘。任何类的对象#xff0c;都有一个this指针#xff0c;无处不在。那么this指针的本质究竟是什么#xff1f;this指针什么时候会被用到#xff1f;今天通过几段简单的代码#xff0c;来揭秘一下。 要先揭秘this指针#xff0c;先来说一下函数调…C中的this指针一直比较神秘。任何类的对象都有一个this指针无处不在。那么this指针的本质究竟是什么this指针什么时候会被用到今天通过几段简单的代码来揭秘一下。 要先揭秘this指针先来说一下函数调用时参数的传递过程。考虑以下代码 int sum(int i, int j, int k) {return i j k; }int main() {int a, b, c;a 1;b 2;c 3; sum(a,b,c);return 0; } 这是一段非常简单的函数调用代码。我们生成其汇编代码x86-64如下所示 sum(int, int, int):pushq %rbpmovq %rsp, %rbpmovl %edi, -4(%rbp)movl %esi, -8(%rbp)movl %edx, -12(%rbp)movl -4(%rbp), %edxmovl -8(%rbp), %eaxaddl %eax, %edxmovl -12(%rbp), %eaxaddl %edx, %eaxpopq %rbpret main:pushq %rbpmovq %rsp, %rbpsubq $16, %rspmovl $1, -4(%rbp)movl $2, -8(%rbp)movl $3, -12(%rbp)movl -12(%rbp), %edxmovl -8(%rbp), %ecxmovl -4(%rbp), %eaxmovl %ecx, %esimovl %eax, %edicall sum(int, int, int)movl $0, %eaxleaveret 我们重点来关注一下函数参数的传递过程。通过分析main函数的汇编函数, 我用类似于C语言的伪代码解释了一下每一行的意思辅助理解如下所示。 main pushq %rbpmovq %rsp, %rbp //rbp rspsubq $16, %rsp //rsp - 16movl $1, -4(%rbp) //*(rbp-4) 1movl $2, -8(%rbp) //*(rbp-8) 2 movl $3, -12(%rbp) //*(rbp-12) 3movl -12(%rbp), %edx //edx *(rbp-12)movl -8(%rbp), %ecx //ecx *(rbp-8) movl -4(%rbp), %eax //eax *(rbp-4)movl %ecx, %esi //esi ecx movl %eax, %edi //edi eaxcall sum(int, int, int)movl $0, %eaxleaveret 在执行这条指令call sum(int, int, int)前main函数的栈空间分布如下 即main函数会存储三个变量: a, b, c. 同时会将其值分别赋值给edi, esi、edx寄存器。那么我们很好奇将a, b, c三个变量的值赋值给edi, esi、edx寄存器会有什么用呢我们先来看一下sum函数我用类似于C语言的伪代码解释了一下每一行的意思辅助理解如下所示。 sum(int, int, int):pushq %rbpmovq %rsp, %rbp //rbp rspmovl %edi, -4(%rbp) //*(rbp-4) edimovl %esi, -8(%rbp) //*(rbp-8) esimovl %edx, -12(%rbp) //*(rbp-12) edxmovl -4(%rbp), %edx //edx *(rbp-4)movl -8(%rbp), %eax //eax *(rbp-8)addl %eax, %edx //edx eax movl -12(%rbp), %eax //eax *(rbp-12) addl %edx, %eax //eax edx popq %rbpret sum函数的栈空间分布如下 我们重点关注一下这几条指令 movl    %edi, -4(%rbp)     //*(rbp-4) edi  movl    %esi, -8(%rbp)     //*(rbp-8) esi  movl    %edx, -12(%rbp)  //*(rbp-12) edx 可以看到在sum函数的栈空间中其会分配三个存储单元rbp-4, rbp-8, rbp-12存储123。而123这三个值分别又是从edi,  esi、edx三个寄存器中拷贝过来的。而这三个寄存器的值又是来自main函数中a, b, c三个变量的赋值。也就是说这里edi,  esi、edx三个寄存器在函数调用时完成了参数的传递。那么这种参数传递的现像是不是有什么约定呢 答案是有的 在Linux/macOS 等 Unix-like系统中函数的调用约定标准为System V AMD64 ABI其参数传递机制 参数位置整数/指针寄存器浮点寄存器第 1 个RDIXMM0第 2 个RSIXMM1第 3 个RDXXMM2第 4 个RCXXMM3第 5 个R8XMM4第 6 个R9XMM5第 7 个栈右→左XMM6-7 从这个约定中得知在传递整数时第一个参数用的是RDI寄存器第二个参数用的是RSI寄存器第三个参数用的是RDX寄存器。上面函数调用的例子中正好符合此调用约定例子中用的是edi,  esi、edx三个寄存器传递第1第2第3个参数而edi,  esi、edx正好是RDI、RSI、RDX三个寄存器的低32位。 this指针揭秘继续...
http://www.dnsts.com.cn/news/93543.html

相关文章:

  • 二级目录 网站网站的分辨率是多少
  • 免费网站mvjquery在网站开发实例运用
  • 垦利住房和城乡建设局网站做it人经常逛的网站
  • 合肥网站开发 合肥网站优化公司网站备案是什么意思
  • 广州网站建设代理国外做蒸汽锅炉的网站
  • 网站建设哪儿好网站建设类毕业设计
  • 太仓网站建设太仓郑州做网站比较好公司
  • 百度云网站开发怎样开网站找片子有什么好的关键词推荐
  • 衡水做淘宝网站长治建一个网站大概要多少钱
  • pageadmin做网站要钱吗网络营销就是什么
  • 组织建设 湖南省直工会网站做ppt哪个网站的图片好
  • 平顶山建设局网站win7 网站系统怎么做
  • 建站小程序编辑器闪亮登场网站定制解决方案
  • 做农产品的网站北京赛车彩票网站怎么做
  • 企业网站定制设计公司徐州网站制作企业
  • 游戏推广怎么找玩家做网站优化用什么软件
  • 招聘网站建设费用多少钱网站建设代码优化
  • 网页设计怎么建站点只用jsp做网站
  • 三五互联网站报价表网络应用开发工程师
  • 需要做网站的公司做网站制作较好的公司
  • 360怎么做网站搜索青岛关键词排名推广
  • 陕西网站备案 多久福田网站制作设计
  • 外贸soho东莞建站网站建设与优化计入什么科莫
  • 龙泉做网站哪家好如何建立个人免费网站
  • 做网站大优惠昆山住房和城乡建设局网站首页
  • 网站背景怎么设置服装公司网站网页设计
  • 中山网站制作系统网站推广计划的内容
  • 网站改版建议网页设计与制作教程知识点
  • 拱墅区网站建设php网站集成支付宝接口
  • 电子商务企业网站建设计划书西安阿里云网站建设