摘要: C++类对象内存布局测试系统:Windows XP编译器:VS2008(三)考虑有虚函数的情况下普通类的情况: 在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。#pragma pack(8)class A{public: int a;double a2; A():a(0xaaaaaaaa),a2(0){} virtual void funA2(){} virtual ~A(){} virtual void funA(){}}; 阅读全文
posted @ 2012-10-20 20:35 林老虎点蚊香 阅读(253) 评论(1) 推荐(0) 编辑
摘要: C++类对象内存布局测试系统:Windows XP编译器:VS2008(四)虚继承的情况:如果说没有虚函数的虚继承只是一个噩梦的话,那么这里就是真正的地狱。这个C++中最复杂的继承层次在VC上的实现其实我也没有完全理解,摸爬滚打了一番也算得出了微软的实现方法吧,至于一些刁钻的实现方式我也想不到什么理由来解释它,也只算是知其然不知其所以然吧。也还是从最简单的开始,我们分2个阶段来探讨。一个是有虚函数的派生类虚继承了没有虚函数的基类的情况,一个情况是有虚函数的派生类虚继承了有虚函数的基类的情况。从第一个开始慢慢深入。派生类有虚函数,而虚基类都没有虚函数的情况也还算比较简单。因为虚函数表指针一定是会 阅读全文
posted @ 2012-10-20 20:35 林老虎点蚊香 阅读(237) 评论(0) 推荐(0) 编辑
摘要: C++类对象内存布局测试系统:Windows XP编译器:VS2008(二)虚继承的情况从这里开始分析C++类对象内存布局的难度将会跳跃性的增长,虚继承的情况比单继承和多继承的情况要复杂得很多,实现难度和开销系数都比之前大,而这也仅仅是噩梦的开始……我们知道,虚继承的基类在类的层次结构中只可能出现一个实例。虚基类在类的层次结构中的位置是不能固定的,因为继承了虚基类的类可能会再次被其他类多继承。比如class A: virtual T{} 这时T的位置如果相对于A是固定值的话,假设偏移是X,当再有个类 class B:virtual T{} ;这时假设在B里面T的偏移是固定的Y,而当再有一个类, 阅读全文
posted @ 2012-10-20 20:34 林老虎点蚊香 阅读(441) 评论(0) 推荐(0) 编辑
摘要: C++类对象内存布局测试系统:Windows XP编译器:VS2008在写完了本章的初稿之后,我拜读了那本经典的《Inside The C++ Object Model》,深度探索C++对象模型,我在火车上大概花了20个小时就看完了,因为其实我对这个东西已经比较了解了,这本书给我带来的肯定多过给我带来的惊喜,当然书是有点老,但是其中很多地方也拓展了我的思维,“恩,就应该是这样的”。除了看了这本著作以外我还花了蛮多时间查找了网上的各种资料和博文,为的当然是更加全面的知识。当我写完了这篇文章之后,再去查看这些博文和资料,我发现网上的很多东西其实都略显得肤浅了,而且关键的地方基本上都错掉了,我不想说 阅读全文
posted @ 2012-10-20 20:32 林老虎点蚊香 阅读(1055) 评论(0) 推荐(0) 编辑
摘要: C++虚基类表指针字节对齐模型测试系统:Windows XP编译器:VS2008,VC 6.0关于虚基类表指针/虚函数表指针这些类里面的“隐藏成员”在结构里面是如何进行字节对齐的这个问题困惑了我48个小时。虽然网上也有很多关于虚继承、虚函数表、虚基类等内存布局的一些文章,但是基本上谈的都是大致的布局,什么地方有什么,按照什么顺序来排放等这些泛泛而谈的东西,好像都没有把字节对齐方面考虑进去的文章,或许他们都没有考虑到一些复杂层次的类继承关系,从而字节对齐的问题也没有成为问题,也自然而然地会被忽略掉,或者得出错误的对齐规则结论。也许是我一开始就走错了路,在错误中越走越远,尝尽了各种曲扭的解决方案来 阅读全文
posted @ 2012-10-20 20:29 林老虎点蚊香 阅读(502) 评论(0) 推荐(0) 编辑
摘要: C&C++结构的字节对齐测试系统:Windows XP编译器:VC6.0,VS2008结构体的字节对齐是我很早就想全面了解一下的东西,这个东西本质上是和硬件相关的,本来要想真正全面了解的话必须得知道CPU的结构、内存的结构、CPU指令是如何执行的等这些硬件层的东西才行,并不是说了解几个寄存器写两句汇编码就可以的,和这个没联系。在尝试了几次之后,迫于个人能力问题,无奈之下只好放弃深层次的了解,只能了解一下字节对齐的规则,至于为什么要对齐的话题,大概也就只能从网络上那几句肤浅的话了解到了:“一些平台对某些特定类型的数据只能从某些特定地址开始存 ……最常见的是如果不按照适合其平台要求对 数据 阅读全文
posted @ 2012-10-20 20:28 林老虎点蚊香 阅读(417) 评论(0) 推荐(0) 编辑