【問】Windows下C++局部變量在內存中的分佈問題

    本來是爲了看看C++對象模型中子對象賦值給一個父對象和父類型指針指向的域時,到底會不會切割,就打開codebloks寫了下面的代碼,編譯器選的是GNU。spa

 

 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 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++編譯,出來的結果也是正常的。指針

 

    已在博問裏提問,怕忘記這件事就記載在博客裏。靜候大俠答覆~ code

相關文章
相關標籤/搜索