动态联编实现原理分析.docxVIP

  • 6
  • 0
  • 约6.41千字
  • 约 8页
  • 2018-02-15 发布于河南
  • 举报
动态联编实现原理分析

动态联编实现原理分析所谓动态联编,是指被调函数入口地址是在运行时、而不是在编译时决定的。C++语言利用动态联编来完成虚函数调用。C++标准并没有规定如何实现动态联编,但大多数的C++编译器都是通过虚指针(vptr)和虚函数表(vtable)来实现动态联编。基本的思路是:(1)为每一个包含虚函数的类建立一个虚函数表,虚函数表的每一个表项存放的是个虚函数在内存中的入口地址;(2)在该类的每个对象中设置一个指向虚函数表的指针,在调用虚函数时,先采用虚指针找到虚函数表,确定虚函数的入口地址在表中的位置,获取入口地址完成调用。我们将从以下几个方面来考察动态联编的实现细节。1.虚指针(vptr)的存放位置虚指针是作为对象的一部分存放在对象的空间中。一个类只有一个虚函数表,因此类的所有对象中的虚指针都指向同一个地方。在不同的编译器中,虚指针在对象中的位置时不同的。两种典型的做法是:(1)在Visual C++中,虚指针位于对象的起始位置;(2)在GNU C++中,虚指针位于对象的尾部而不是头部。可通过下面的程序考察在Visual C++中,虚指针在对象中的位置。#include iostreamusing namespace std;int globalv;class NoVirtual{int i;public:void func(){coutno virtual functionendl;}

文档评论(0)

1亿VIP精品文档

相关文档