恭喜你通过了卡伦特C++二面!面试官似乎非常注重底层和原理的理解,而不是只停留在表面问题上,这也是一个好的面试官。对于你提到的问题,我来简单解答一下:
1. 进程和线程在内存上的区别:
进程是操作系统资源分配的基本单位,每个进程都有独立的内存空间,而线程是进程内的执行单元,线程共享进程的内存空间。
2. 类的内存对齐和虚函数的分配:
类的内存对齐是为了提高内存读取效率,虚函数表一般是在类的最前面,虚函数指针指向虚函数表,而char类型的变量一般是在对齐后的第一个位置,所以虚函数表会在char变量的前面。
3. const char *和char const *和char * const的区别:
const char *表示指向const char类型的指针,指针指向的值不能被修改;
char const *与const char *等价;
char * const表示指向char类型的const指针,指针本身不能被修改,但指向的值可以被修改。
4. classA和classB的问题:
如果用classB调用classA的ap方法,a的值为10,因为classB中的overread操作修改了a的值。
希望我的回答能对你有所帮助,祝你在未来的面试中顺利通过!