C++面试常见问题(五)
1、静态链接和动态链接的区别
静态链接:
使用静态库进行链接。静态库(.a 、.lib)。
动态链接:
使用动态库进行链接。动态库(.so 、.dll )。
具体的区别下面这篇博客讲得比较详细。
大家可以移步至:C++静态库与动态库
2、C++中类对象的内存布局
-
空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);
-
一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;
因此一个对象的大小 >= 所有非静态成员大小的总和
-
当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable;
-
虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);