首页 > 代码库 > 【问】WIndows下C++局部变量在内存中的分布问题

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

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

 

 1 #define DEBUG(X) std::cout<<#X"\t=\t"<<X<<std::endl; 2  3 class A 4 { 5 public: 6     int a; 7     A():a(1){} 8 }; 9 10 class B11 {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++编译,出来的结果也是正常的。

 

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

 

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