通过汇编代码分析C++的动态联编机制

本文深入探讨C++中的动态联编机制,通过分析包含虚函数的类在编译后的汇编代码,揭示了虚函数如何实现运行时的函数调用。文章以一个简单的类和其构造函数为例,详细阐述了对象内存布局、vftable的生成和使用,以及通过指针调用虚函数的过程,帮助读者理解C++动态联编的本质。
摘要由CSDN通过智能技术生成
      C++中的一大法宝就是虚函数,简单来说就是加virtual关键字定义的函数。
  其特性就是支持动态联编。现在C++开发的大型软件中几乎已经离不开虚函数的
  使用,一个典型的例子就是虚函数是MFC的基石之一。

     这里有两个概念需要先解释:

  静态联编:通俗点来讲就是程序编译时确定调用目标的地址。
  动态联编:程序运行阶段确定调用目标的地址。
    
     在C++中通常的函数调用都是静态联编,但如果定义函数时加了virtual关键
  字,并且在调用函数时是通过指针或引用调用,那么此时就是采用动态联编。

      一个简单例子:
// test.cpp
#include<iostream.h>
class ClassA
{
public:
  int num1;
  ClassA(){ num1=0xffff; };
  virtual void test1(void){};
  virtual void test2(void){};
};
ClassA objA,* pobjA;

int main(void)
{
  pobjA=&objA;
  objA.test1();
  objA.test2();
  pobjA->test1();
  pobjA->test2();
  return 0;
}



 
使用VC编译:
开一个命令行直接在命令行调用cl来编译: (如果你安装vc时没有选择注册环境 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值