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

门户网站目标客户广告公司的业务范围

门户网站目标客户,广告公司的业务范围,做汽车新闻哪个网站好,网站做线上销售1. 什么是 this 指针 C 中的 this指针是一个由系统维护的指针,其指针本身的地址存储在某个内存位置,对程序员不可见(程序员不能取得其地址),其仅在当前定义的实体的函数体内可见。 当任何外部函数调用实体的函数时,系统会将该实…

1.   什么是 this 指针

    C++ 中的 this指针是一个由系统维护的指针,其指针本身的地址存储在某个内存位置,对程序员不可见(程序员不能取得其地址),其仅在当前定义的实体的函数体内可见。

    当任何外部函数调用实体的函数时,系统会将该实体的地址存入this指针,进入函数后就可以通过该this指针访问实体的成员(数据和函数)。

2.   例释 this 指针(以windows 64位平台为例)

    为了简单起见,我们定义一个结构体并定义一个函数,使用默认构造函数:

struct DataEntity

{

    __int64 m = 10;

    __int64 n = 20;

    __int64 Add()

    {

        return m + n;

    }

};

调用代码:

    DataEntity data;

    __int64 total = data.Add();

实现分析(汇编代码):下面通过其生成的汇编代码来分析其实现过程。

(1) 调用构造函数

    DataEntity data;

00007FF689FF5073  lea   rcx,[data]  ;将实体的地址存入寄存器 rcx (调用构造函数传参用)

00007FF689FF5078  call  DataEntity::DataEntity (07FF689E76F55h)  ;调用构造函数

下面进入构造函数:

DataEntity::DataEntity(void):

00007FF7946A13F0  mov         qword ptr [this],rcx  ;将实体地址存入this指针

;在每一个生成函数中,都会在进行正式操作前插入这样一段代码,先将实体地址存入this指针,

;以便程序员后续利用 this指针操作该对象的成员

00007FF7946A13F5  mov     rax,qword ptr [this]  ;取得this存储的对象地址

00007FF7946A13FA  mov     qword ptr [rax],0Ah  ; 将 10 送入 m ,因为此时寄存器 rax

;存放的是实体的首地址,其首地址就是 m 的地址。

00007FF7946A1401  mov     rax,qword ptr [this]  ;再取this存储的对象地址存入寄存器 rax

00007FF7946A1406  mov     qword ptr [rax+8],14h  ;地址+8正好是n的内存位置,将20送入

;n 的地址指向的内存

00007FF7946A140E  mov     rax,qword ptr [this]  ; this 指针送入寄存器 rax 以备使用

00007FF7946A1413  ret  ; 操作完成,函数返回

注意:该 this 指针在函数调用期间保持不变。

(2) 调用自定义函数

    __int64 total = data.Add();

00007FF79481507D  lea     rcx,[data]  ;将实体的地址存入寄存器 rcx (调用构造函数传参用)

00007FF794815082  call    DataEntity::Add (07FF794696F64h)  ;调用函数

00007FF794815087  mov     qword ptr [total],rax ;从rax取出计算结果送入total 内存。

进行被调函数内部流程:

__int64 Add()

    {

00007FF7946A12F0  mov         qword ptr [this],rcx  ; 取出实体地址存入 this

        return m + n;

00007FF7946A12F5  mov         rax,qword ptr [this]  ;得取this

00007FF7946A12FA  mov         rax,qword ptr [rax]  ; m 值送入寄存器 rax

00007FF7946A12FD  mov         rcx,qword ptr [this] ;得取this

00007FF7946A1302  add         rax,qword ptr [rcx+8]  ;rcx+8=n的地址,将n加到rax(m)

    }

00007FF7946A1306  ret  ;函数返回,寄存器rax的值即为计算结果,上述标红的部分即从rax取

;出结果,在 Windows X64 加构下,约定使用 rax 传递返回值。

http://www.zhongyajixie.com/news/60665.html

相关文章:

  • 电子商务网站后台如何在互联网推广自己的产品
  • 党校网站建设管理工作方案国内网站排名
  • 广告设计软件aiwin7优化大师免安装版
  • 阿里巴巴网站导航怎么做海南百度推广总代理商
  • 做网站的一般多少钱网站建设的基本
  • 新泰网站建设方案互联网全媒体广告代理
  • 刷移动端seo软件扬州百度seo公司
  • 软件下载网站源码行业关键词分类
  • 校园兼职信息发布网站开发论文湖南专业seo推广
  • 优秀的html5网站 2016百度站长平台工具
  • 怎么吧自己电脑做网站英文seo实战派
  • wordpress 自定义登录页面某网站seo诊断分析
  • 重庆网站建设制作设计公司哪家好最新小组排名
  • 昆明网站建设搜王道下拉什么软件可以搜索关键词精准
  • 大连 网站建设重庆seo技术教程博客
  • 太原做网站 小程序域名大全查询
  • 网站后台多个管理员外包网络推广营销
  • 时尚大气的网站设计个人如何在百度上做广告
  • 网页游戏网站建设网站建设企业
  • 企业信息系统河南网站优化入门免费教程
  • 如何建一个企业网站百度营稍
  • 哪个网站教做ppt网络项目免费的资源网
  • 重庆专业网站建设费用网站seo优化公司
  • 企业网站建设方案.docseo编辑的工作内容
  • 网站tdk设置界面seo快速排名软件推荐
  • 四川省建设工程交易中心网站系统推广公司
  • 找婚庆公司去什么网站石家庄seo管理
  • 在建设网站入账电子技术培训机构
  • 网站开发文档 php营销方式和手段有哪些
  • 绵阳房产网站建设专业seo公司