首页 > 代码库 > 对象所占内存的大小与首地址
对象所占内存的大小与首地址
1 #include "stdafx.h" 2 #include "iostream" 3 4 using namespace std; 5 6 class stu 7 { 8 private: 9 int Id;10 int Age;11 int Tall;12 int Sex;13 public:14 void setID(int a);15 void setAge(int a);16 void setTall(int a);17 int getId();18 int getAge();19 int getTall();20 void IP()21 {22 cout << this << endl;23 }24 };25 26 void stu::setID(int a)27 {28 Id = a;29 }30 void stu::setAge(int a)31 {32 Age = a;33 }34 void stu::setTall(int a)35 {36 Tall = a;37 }38 int stu::getId()39 {40 return Id;41 }42 int stu::getAge()43 {44 return Age;45 }46 int stu::getTall()47 {48 return Tall;49 }50 51 52 int main(int argc, char* argv[])53 {54 stu liu; //用类stu定义一个名为liu的对象.55 liu.setID(2); //从这个函数的的反汇编得出里面的ECX=0018FF3856 liu.IP(); //这个函数里面打印了this的值,也是0018FF3857 cout << &liu << endl ; //打印的结果是0018FF3858 return 0;59 }60 /*61 结论:62 *********************************************************************63 1.this指针指向的是当前对象"首地址".64 2.对象里面的函数成员的函数框架里面ECX存放的就是当前对象的"首地址".65 3.用 &liu 这样的方法也可以得出当前对象的首地址.66 */67 68 69 70 /*71 反汇编分析72 50: {73 00401400 push ebp74 00401401 mov ebp,esp75 00401403 sub esp,50h76 00401406 push ebx77 00401407 push esi78 00401408 push edi79 00401409 lea edi,[ebp-50h]80 0040140C mov ecx,14h81 00401411 mov eax,0CCCCCCCCh82 00401416 rep stos dword ptr [edi]83 51: stu liu; //反汇编时,如果在这里下了断点,调试时调试箭头会移动到 return 0 这里.84 52: //因为stu liu 只是定义了一个对象,没有具体进行操作. 85 53: return 0;86 00401418 xor eax,eax87 54: }88 0040141A pop edi89 0040141B pop esi90 0040141C pop ebx91 0040141D mov esp,ebp92 0040141F pop ebp93 00401420 ret94 //从 sub esp,50h 来看,因为是定义了对象liu ,所以多了10h的内存空间.95 //在类里面有4个int 变量和6个函数.可以看出,类的数据成员是会向调用函数申请空间的,96 //而函数成员是不会向调用函数申请占内存的.97 */
对象所占内存的大小与首地址
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。