首页 新闻 会员 周边

Windows下C++局部变量分布的一个奇妙问题

0
[待解决问题]

原本是为了看看C++对象模型中子对象赋值给一个父对象和父类型指针指向的域时,到底会不会切割,就打开codebloks写了下面的代码,编译器选的是GNU。

#define DEBUG(X) std::cout<<#X"\t=\t"<<X<<std::endl;

class A
{
public:
    int a;
    A():a(1){}
};

class B
{
public:
    A oa;
    int b;
    B():b(2){}
};

main()
{
    B ob;
    A oa;//=ob.oa;
    int *p = 0;
    p = (int *)&oa;
    DEBUG(&ob);
    DEBUG(&oa);
    DEBUG(&p);
}

发现打印出来的局部变量的地址的排列,从大地址到小地址是:ob,p,oa, 把DEBUG(&p)去掉之后排列又恢复正常了(ob, pa, p)。然后程序放在Linux下用g++编译,出来的结果也是正常的。有大侠知道是怎么回事吗?Windows到底对C++局部变量做了什么?!

chng的主页 chng | 初学一级 | 园豆:6
提问于:2015-01-12 21:18
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册