【问】Windows下C++局部变量在内存中的分布问题

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

 1 #define DEBUG(X) std::cout<<#X"	=	"<<X<<std::endl;
 2 
 3 class A
 4 {
 5 public:
 6     int a;
 7     A():a(1){}
 8 };
 9 
10 class B
11 {
12 public:
13     A oa;
14     int b;
15     B():b(2){}
16 };
17 
18 main()
19 {
20     B ob;
21     A oa;//=ob.oa;
22     int *p = 0;
23     p = (int *)&oa;
24     DEBUG(&ob);
25     DEBUG(&oa);
26     DEBUG(&p);
27 }

    打印出来的局部变量的地址的排列,从大地址到小地址是:ob,p,oa, 把DEBUG(&p)去掉之后排列又恢复正常了(ob, pa, p)。然后程序放在Linux下用g++编译,出来的结果也是正常的。

    已在博问里提问,怕忘记这件事就记载在博客里。静候大侠答复~ 

原文地址:https://www.cnblogs.com/zhchngzng/p/4219856.html