1.虚函数表的原理,单继承和多重继承有什么不一样的
1)基类和继承类的虚函数表的存储的函数指针;
每个类都有自己独立的虚函数表,存放在类内存的首地址。一个虚函数表可以理解为一个函数指针数组。子类继承基类的虚函数表,如果有重写虚函数则子类虚函数覆盖虚函数表中的基类函数的指针;
2)多重继承的模型
多重继承的模型中,子类会保存多个虚函数表以对应不同父类;重写虚函数的话就替换表中相同的虚函数,自己的虚函数会添加到第一个继承的类的虚函数表后面;
3)菱形继承
菱形继承会出现通过不同的途径继承过来的父类或者爷爷类在派生类种存在多份,浪费了内存且存在二义性。可以通过虚继承来实现,具体为:虚基类表指针(virtual base table pointer),该指针指向了一个虚基类表(virtual table),虚表中记录了虚基类与本类的;通过偏移地址,这样就找到了虚基类成员,而虚继承也不用像普通多继承那样维持着公共基类(虚基类)的两份同样的拷贝,节省了存储空间。
2.三次握手的模型(client和server的状态变化)
3.多线程和进程间通信有什么方式
4.动态库的加载方式
5.共享内存的实现
6.win32界面函数调用过程
7.i/0模型(网络连接场景有上千个client)
8.运行时库多线程修改里面的全局变量,什么结果
9.__cdecl 和__stdcall的区别
10.虚拟内存是怎么出来的
11.vs生成c++代码生成的MD和MT区别
/MT和/MTd表示采用多线程CRT库的静态lib版本。 提高了运行效率,但是代码会变得臃肿
/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。代码体积小