摘要:
C++对象内存布局测试总结 http://hi.baidu.com/%D6%F2%C7%EF/blog/item/826d38ff13c32e3a5d6008e8.html 上文是半年前对虚函数、虚拟继承的理解。可能有一些错漏。而且只是理解了比较简单的部分,表达也不够清晰,这次决定花的时间再做一次总结。 对于普通的C++对象内存布局,简单得不得了,就不做总结了。这里只总结涉及到虚拟继承的情况。 因为不同编译器对虚拟继承的实现采用不同的方式,所以要完整的分析是不可能的。这里只考虑VS2005/2008,还有简单涉及GCC编译器。1、 单个虚拟继承只是为了分析而已,实际中并没有太大的作用。... 阅读全文
摘要:
C++对象内存布局--虚基类表的使用一、测试VS编译器,虚基类表在函数调用时是怎么使用的1、测试代码:2、使用OllyDbg反汇编调试的相关结果:图 1 VC++6.0编译器,OD调试结果图 2 VS2005/2008编译器,OD调试结果3、结果表明,在调用虚基类函数的时候,有使用到虚基类表指针。二、测试GCC编译器,虚基类表在函数调用时是怎么使用的1、测试代码跟上边的一样。2、使用OllyDbg... 阅读全文
摘要:
C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承 阅读全文
摘要:
C++对象内存布局--⑨VS编译器--虚拟继承--菱形继承 阅读全文
摘要:
C++对象内存布局--⑧GCC编译器--虚拟继承多个基类 阅读全文
摘要:
C++对象内存布局--⑦VS编译器--虚拟继承多个基类 阅读全文
摘要:
C++对象内存布局--⑥GCC编译器-虚拟继承的虚基类表可能有两个 阅读全文
摘要:
C++对象内存布局--⑤GCC编译器--单个虚拟继承 测试GNU的GCC编译器在处理虚拟继承上跟VS不同的地方。派生类的虚函数表跟虚基类表合并。 阅读全文
摘要:
C++对象内存布局--④VS编译器--单个虚拟继承 在VS2005编译器下,证明单个虚拟继承的内存布局:无论有无虚函数,必然含有虚基类表指针。虚基类表中的内容为本类实例的偏移和基类实例的相对偏移值。 如果有虚函数,那么基类的虚函数表跟派生类的虚函数表是分开的。 在内存布局上,地址从低到高,顺序如下:派生类的虚函数表指针,虚基类表指针,派生类的成员变量,基类的虚函数表指针,基类的成员变量。也就... 阅读全文
摘要:
C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中。 派生类有多少个拥有虚函数的基类,派生类对象就有多少个指向虚函数表的指针。 阅读全文