0001-虚函数和虚表笔记

目录

    • 一个空对象至少占用1字节的空间
      展开查看:原因是在栈上分配2个对象时,要区分地址
      
          class Object { };
          void Function () { 
             Object o1, o2; // 需要区分o1,o2的地址
          }
       

    • 空类有虚函数,需要占用一个指针的空间,即:编译器会插入一个虚函数表指针vptr

    • 有虚函数指针,就意味着有虚函数表
      编译期时,编译器会把虚表指针赋值,安插在类中,Object::vptr=&Object::vftable
      这个过程是背着程序员进行的
      编译器充当地址管理器的角色

    多继承下的虚表

    • 虚函数表会被编译进可执行文件.o或动态库.so中,运行时会被加载到内存页中

    • 虚函数运行时查虚函数表,找到函数地址再执行(多一层寻址,性能差些)

    posted @ 2023-06-05 19:41  马角的逆袭  阅读(11)  评论(0)    收藏  举报