《深度搜索C++对象模型》的一些学习纪要:
原文链接:ordeder http://blog.csdn.net/ordeder/article/details/26396989
0. 类的编译中,先编译成员变量和成员函数的额声明,成员函数的定义在类声明结束后再处理;
1. 类中,多个代码区块public或者private最终会被按区块统一,然后编译过程中,后定义的成员变量地址高于定义的成员变量;
2. 静态变量在程序启动时初始化,存储的位置在于程序的全局数据段中;
3. 继承中,基类保持者自己在内存对象的格局,对象格局的填充位不被派生类的成员所格局占用(防止不必要的数据覆盖);
4. 虚继承中,将派生类中的成员分为确定部分和共享部分,其中共享部分为基类的成员印象,通常通过指针加上偏移量来标志这块共享区域,虚继承对象对共享块的范围过程中涉及到了间接性访问,影响程序效率;
5. 基类如果有虚函数,那么基类必然就有一个额外的内部指针vptr指向一个虚函数表,在继承中,这个vptr和虚函数是和成员变量一样被继承,而且在内存格局中,vptr在格局的首部或者尾部。
6. 多态是通过虚函数指针实现的,但是说白了就是函数指针罢了。其中要理解一个重要的概念是:指针类型决定了程序对一块内存区域的解析;
值得看懂的图:
图1: 继承中的基类的padding是不会在派生类中被利用的,故而每次多继承中可能会产生额外的填充位
8. 虚函数的的实现机制为前文第5点说明了,且注意,虚函数表中的虚函数指针指向的虚函数同样被编译器进行了处理,处理方式和第7点的方法类似,同样在参数类表中有this指针作为对象数据通道;
C++面向对象—成员函数与成员变量的实现机制学习笔记(1),布布扣,bubuko.com
原文地址:http://blog.csdn.net/ordeder/article/details/26396989