【问】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 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++编译,出来的结果也是正常的。
已在博问里提问,怕忘记这件事就记载在博客里。静候大侠答复~
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。