VC编译器中,类对象的内存布局是怎样的?
RT 问题点数:100、回复次数:17Top
1 楼lifanxi(Byron)回复于 2004-08-04 20:53:28 得分 10
您可以在DEBUG模式下打开反汇编窗口来读它生成的汇编代码,由此来学习它的内存布局形式。就这么讲是讲不清楚的。Top
2 楼antijpn(antijpn)回复于 2004-08-04 21:04:22 得分 20
回答是:天机玄妙,无从猜测。
VC++的编译器生成的汇编和实际情况也不一样,只能从理论上推知各个成员的布局,但是最终代码里面搞不好很多东西安排的顺序什么的完全都不一样,这个可以从函数中对象定义以及实际地址的关系看出来Top
3 楼renheihei(请大家注意:用DEV C++作为测试编译器!!!!!!!!!,vc++测试可能通不过!!!!!!!!)回复于 2004-08-04 21:51:55 得分 0
mark
Top
4 楼chunhai12(小海)回复于 2004-08-05 09:27:39 得分 0
不懂
来学习Top
5 楼freefalcon(心宇—消失中...)回复于 2004-08-05 11:12:33 得分 10
不是看汇编代码,是看内存,你可以将各成员赋上不同的值,然后方便查看
自己观察内存是最好的方法,另外可以参考<深度探索C++对象模型>Top
6 楼LLnju(LLnju)回复于 2004-08-05 11:48:15 得分 10
没看到什么很玄妙的地方啊,编译的时候你加上 /FA[file] 选项看看它生成的汇编代码就一目了然了Top
7 楼SoRoMan(因为所以,所以因为)回复于 2004-08-05 12:12:50 得分 10
为了支持构造,析构函数,虚拟函数成员,RTTI,C++编译器的确在幕后作了不少工作。
调试看内存,还有看看<深度探索C++对象模型>
Top
8 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-08-05 12:14:02 得分 10
<深度探索C++对象模型>讲的概念!具体你还是要反汇编出来.Top
9 楼antijpn(antijpn)回复于 2004-08-05 14:45:21 得分 10
回复人: LLnju(LLnju) ( ) 信誉:100 2004-8-5 11:48:16 得分: 0
没看到什么很玄妙的地方啊,编译的时候你加上 /FA[file] 选项看看它生成的汇编代码就一目了然了
汇编并不能显示真正的内存布局什么的,它是根据源文件生成的,而不是最终代码的反汇编
反汇编倒是可行的Top
10 楼terryfjh()回复于 2004-08-05 19:51:08 得分 0
<深度探索C++对象模型>我在看,里面讲的有些东东(比如说多层继承后,子类的vptr个数等)和VC编译器的处理不一样,书里面也说有些东东因编译而定
所以我想弄清楚<深度探索C++对象模型>里讲的对象的内存布局与VC实际的内存布局的区别,特别是vptr和虚基类的指针
谢谢!哪位高人指点一下。Top
11 楼chinadragonss(独孤俊)回复于 2004-08-05 21:13:48 得分 0
谁有<深度探索C++对象模型>这本书的电子版的吗,能不能给俺发一份。dugujung@126.comTop
12 楼zxs790501(沧海一粟)回复于 2004-08-05 21:51:50 得分 0
<深度探索C++对象模型>这本书的电子版
我也要一份,好心人寄给我啊:zhuxiangsheng@sina.comTop
13 楼terryfjh()回复于 2004-08-06 20:28:44 得分 0
文件有8M多,寄不过来啊Top
14 楼terryfjh()回复于 2004-08-07 18:42:45 得分 0
upTop
15 楼dadayanyan(dadayanyan)回复于 2004-08-07 18:51:27 得分 10
c++深度探索 第三章有介绍的Top
16 楼terryfjh()回复于 2004-08-08 18:49:41 得分 0
里面写的东东和实际的不太一样Top
17 楼bjyjy(yjy)回复于 2004-08-12 18:59:00 得分 10
例如:
class CBlock {
private:
BYTE blk[10];
public:
..........
}
int main(void)
{
CBlock block;
}
通过汇编程序发现,CBlock内的数据blk是在栈内分配的,试了其他的
程序发觉也是这样。
Top




